大家好,我是考100分的小小码 ,祝大家学习进步,加薪顺利呀。今天说一说Oracle学习(七) — MyBatis操作、JDBC操作[亲测有效],希望您对编程的造诣更进一步.
1、MyBatis操作
1.1、环境搭建
- 步骤一:创建项目 test_oracle
-
步骤二:修改pom.xml文件(MyBatis相关依赖、Oracle驱动、测试依赖)
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>changgou3_parent_java78</artifactId> <groupId>com.czxy.changgou3</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>test_oracle</artifactId> <dependencies> <!--web起步依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--测试--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> <!--通用mapper起步依赖--> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper-spring-boot-starter</artifactId> <version>2.0.4</version> </dependency> <!--mybatis分页插件--> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.2.3</version> </dependency> <!--简化 javabean--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <!--Oracle驱动--> <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc6</artifactId> <version>12.1.0.1-atlassian-hosted</version> </dependency> </dependencies> </project>
代码100分
步骤三:创建yml文件(数据库基本4项 — Oracle驱动+Oracle连接)
代码100分
spring: datasource: #数据源配置 driver-class-name: oracle.jdbc.driver.OracleDriver url: jdbc:oracle:thin:@localhost:1521:xe username: czxy002 password: czxy002
-
步骤四:启动类
package com.czxy; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; /** * Created by liangtong. */ @SpringBootApplication public class TestOracleApplication { public static void main(String[] args) { SpringApplication.run(TestOracleApplication.class, args); } }
1.2、MyBatis 基本操作 + 测试
- 步骤一:编写 JavaBean,t_area –> Area
代码100分package com.czxy.domain;
import lombok.Data;
import javax.persistence.Id;
import javax.persistence.Table;
/**
* Created by liangtong.
*/
@Table(name="t_area")
@Data
public class Area {
@Id
private Integer id;
private String name;
}
- 步骤二:编写 Mapper
package com.czxy.mapper;
import com.czxy.domain.Area;
import tk.mybatis.mapper.common.Mapper;
/**
* Created by liangtong.
*/
@org.apache.ibatis.annotations.Mapper
public interface AreaMapper extends Mapper<Area> {
}
- 步骤三:测试类
package com.czxy;
import com.czxy.mapper.AreaMapper;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import javax.annotation.Resource;
/**
* Created by liangtong.
*/
@RunWith(SpringRunner.class)
@SpringBootTest(classes = TestOracleApplication.class)
public class AreaTest {
@Resource
private AreaMapper areaMapper;
@Test
public void testDemo01(){
System.out.println(areaMapper);
}
}
1.3、测试:增删改查
- 使用通用Mapper,Oracle基本增删改查与MySQL相同的。
package com.czxy;
import com.czxy.domain.Area;
import com.czxy.mapper.AreaMapper;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import javax.annotation.Resource;
/**
* Created by liangtong.
*/
@RunWith(SpringRunner.class)
@SpringBootTest(classes = TestOracleApplication.class)
public class AreaTest {
@Resource
private AreaMapper areaMapper;
@Test
public void testInsert(){
//添加
Area area = new Area();
area.setName("米国");
area.setId(7);
areaMapper.insert( area );
}
@Test
public void testUpdate(){
Area area = new Area();
area.setName("米小国");
area.setId(7);
areaMapper.updateByPrimaryKey( area );
}
@Test
public void testDelete(){
//作业
}
}
-
通过Mapper使用 Oracle 序列
-
解决1:自定义添加方法,直接使用序列
@org.apache.ibatis.annotations.Mapper public interface AreaMapper extends Mapper<Area> { @Insert("insert into t_area(id,name) values(seq_stuno.nextval ,#{name})") public void save(Area area); }
-
解决2:通过网上查询资料,使用注解(存在问题,提交的id为null)
@Table(name="t_area") @Data public class Area { @Id //@SequenceGenerator(name="any" ,sequenceName = "seq_stuno") //@GeneratedValue(strategy = GenerationType.IDENTITY, generator = "select seq_stuno.nextval from dual") private Integer id; private String name; }
-
1.4、测试:储存过程
-
没有返回值
/** * 存储过程添加 * @param name */ @Insert("call add_area(#{name})") //如果运行出错,添加下面注解,表示执行的是存储过程 @Options(statementType = StatementType.CALLABLE) public void addArea(@Param("name") String name);
-
有返回值
/** * 调用存放过程--有返回值 * @param area */ @Insert("call add_area2(#{id, mode=OUT, jdbcType=INTEGER},#{name})") @Options(statementType = StatementType.CALLABLE) public void addArea2(Area area);
-
测试程序
package com.czxy; import com.czxy.domain.Area; import com.czxy.mapper.AreaMapper; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import javax.annotation.Resource; /** * Created by liangtong. */ @RunWith(SpringRunner.class) @SpringBootTest(classes = TestOracleApplication.class) public class AreaProTest { @Resource private AreaMapper areaMapper; @Test public void testProAddArea(){ //调用 add_area 存储过程 areaMapper.addArea("米国1111"); } @Test public void testProAddArea2(){ //调用 add_area2 存储过程 Area area = new Area(); area.setName("鹰国111"); areaMapper.addArea2(area); System.out.println(area.getId()); } }
2、JDBC操作
2.1、数据库操作
2.2、JDBC PreparedStatement操作
2.2.1、添加
package com.czxy;
import org.junit.Test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
public class TestJdbc {
@Test
public void testInsert() throws Exception {
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String username = "czxy002";
String password = "czxy002";
//1 注册驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
//2 获得连接
Connection conn = DriverManager.getConnection(url, username, password);
//3.1 处理sql语句--添加,将实际参数替换?
String sql = "insert into t_area(id,name) values(seq_stuno.nextval,? )";
//3.2 获得预处理对象 PreparedStatement
PreparedStatement psmt = conn.prepareStatement(sql);
//3.3 设置参数 -- 给?设置实际参数,有几个?问号,就需要设置几次
psmt.setString(1, "凹国");
//4 执行
int result = psmt.executeUpdate();
//5 处理结果
System.out.println(result);
//6 释放资源
psmt.close();
conn.close();
}
}
2.2.2、查询
@Test
public void testSelectAll() throws Exception {
//查询所有
//1 注册驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
//2 获得连接
Connection conn = DriverManager.getConnection(url, username, password);
//3.1 处理sql语句
String sql = "select * from t_area";
//3.2 获得预处理对象
PreparedStatement psmt = conn.prepareStatement(sql);
//3.3 设置参数 -- 没有?
//4 执行语句
ResultSet rs = psmt.executeQuery();
//5 处理结果
while(rs.next()) {
// 处理一行的数据 rs.get类型("列名");
int id = rs.getInt("id");
String name = rs.getString("name");
System.out.println(id + "__" + name);
}
//6 释放资源
rs.close();
psmt.close();
conn.close();
}
3、JDBC Statement 操作
3.1、查询详情
@Test
public void testFindById() throws Exception {
//通过id查询
int id = 999;
//1 注册驱动
Class.forName(driverName);
//2 获得连接
Connection conn = DriverManager.getConnection(url, username, password);
//3 获得语句执行者 Statement
Statement st = conn.createStatement();
//4 执行sql语句 -- 没有结果、只有一条
ResultSet rs = st.executeQuery("select * from t_area where id = " + id);
//5 处理结果 -- 可以使用while,最多只有一条,if可以处理
if(rs.next()){
// 获得一行数据
int _id = rs.getInt("id");
String name = rs.getString("name");
System.out.println(_id + "###" + name);
} else {
System.out.println("没有查询结果");
}
//6 释放资源
rs.close();
st.close();
conn.close();
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/8078.html