发表于: 2020-05-13 20:53:07

2 1146


今天完成的事情:今天学习了jdbcTemplate,学习完之后发现可能在以后用不到,想哭

明天计划的事情:明天学习mybatis
遇到的问题:今天遇到几个问题,很费时间,因为一直没找到解决方案。

1.我重装系统后,官网下载的安装idea后,一直打不开,百度很久后删除了C盘下的历史文件记录,成功。

2.运行jdbcTemplate访问数据库,一直报我的spring的core,context各种包找不到,找不到类,也是搞了很久,代码删了重写,最后发现是包没有同步,在单机项目后-maven下-有个Reimport

3.还有本地仓库和远程仓库的问题今天把它统一给放在D盘,原来很乱,在idea中Settings--Build--Build Tools--maven设置
收获:不断学习,不断踩坑,最后成为高手。

JDBC Template的学习

一.JDBC Template的概念

为了简化持久化操作,JDBC Template组件完成了对JDBC API的封装。

JDBC Template提供了统一的模板方法,减少了持久化的代码量

创建数据库文件方便操作数据

二.JDBC Template的基本使用

1.execute的使用

创建数据源datasource,以及使用JDBC Template的工具类,创建bean

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/selection_course"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean>

public class Test {
@org.junit.Test
   public void testExecute(){
//获取上下文路径context,在类路径的配置文件中通过ClassPathXmlApplicationContext加载文件
       ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
//通过上下文对象获取到JDBC Template对象拿到
       JdbcTemplate jdbcTemplate = (JdbcTemplate) context.getBean("jdbcTemplate");
jdbcTemplate.execute("create table users (id int,name varchar(20))");
}
}

运行成功后在数据库中新创建了一个users表

2.update和batchUpdate

update对数据进行增删改操作

String sql = "insert into student (name,sex) values(?,?)";
jdbcTemplate.update(sql,new Object[]{"张飞",""});

@org.junit.Test
public void testUpdate1(){
String sql = "update student set sex=? where id = ?";
jdbcTemplate.update(sql,"",1);
}

batchUpdate是批量增删改操作(注意要给汉字加单引号)

@org.junit.Test
public void testBatchUpdate(){
String[] sqls={
"insert into student (name,sex) values('刘备','')",
"insert into student (name,sex) values('关羽','')",
"update student set sex='' where id = 1"
   };
jdbcTemplate.batchUpdate(sqls);
}

 @org.junit.Test
   public void testBatchUpdate1(){
String sql = "insert into selection (student,course) values(?,?)";
List<Object []> list = new ArrayList<Object []>();
list.add(new Object[]{2,1002});
list.add(new Object[]{2,1003});
jdbcTemplate.batchUpdate(sql,list);
}
}

3.query与queryxxx方法

@org.junit.Test
public void testQueryForObject(){
String sql = "select count(*) from student";
int count = jdbcTemplate.queryForObject(sql,Integer.class);
System.out.println(count);
}

输出3

@org.junit.Test
public void testQueryForList(){
String sql = "select name from student where sex=?";
List<String> name = jdbcTemplate.queryForList(sql,String.class,"");
System.out.println(name);
}

查询复杂对象(封装为map)

查询一个

@org.junit.Test
public void testQueryForMap(){
String sql = "select * from student where id=?";
Map<String,Object> name = jdbcTemplate.queryForMap(sql,1);
System.out.println(name);
}

查询多个

@org.junit.Test
public void testQueryForMap1(){
String sql = "select * from student";
List<Map<String,Object>> stu = jdbcTemplate.queryForList(sql);
System.out.println(stu);
}


查询出来封装成实体对象

4.持久层的实现---DAO

4.1编写实体类

4.2编写DAO层的接口和实现impl

public interface StudentDao {
void insert(Student stu);
void update(Student stu);
void delete(int id);
Student select(int id);
List<Student> selectAll();
}

编写的impl实现类

@Repository//持久化对象
public class StudentDaoImpl implements StudentDao {
@Autowired//自动注入JdbcTemplate
   private JdbcTemplate jdbcTemplate;

public void insert(Student stu) {
String sql = "insert into student() values(?,?,?)";
jdbcTemplate.update(sql,stu.getName(),stu.getSex(),stu.getBorn());
}
public void update(Student stu) {
String sql = "update student set name=? sex=? born=? where id=?";
jdbcTemplate.update(sql,stu.getName(),stu.getSex(),stu.getBorn(),stu.getId());
}
public void delete(int id) {
String sql = "delete from student where id=?";
jdbcTemplate.update(sql,id);
}
public Student select(int id) {
String sql = "select * from student where id=?";
return jdbcTemplate.queryForObject(sql,new StudentRowMapper(),id);
}
public List<Student> selectAll() {
String sql = "select * from student ";
return jdbcTemplate.query(sql,new StudentRowMapper());
}
private class StudentRowMapper implements RowMapper<Student>{
public Student mapRow(ResultSet resultSet, int i) throws SQLException {
Student stu = new Student();
stu.setId(resultSet.getInt("id"));
stu.setName(resultSet.getString("name"));
stu.setSex(resultSet.getString("sex"));
stu.setBorn(resultSet.getString("born"));
return stu;
}
}
}

5.优缺点

优点:对于jdbc来说简单灵活吧

缺点:SQL和Java代码掺和   功能不丰富(不能分页,不能访问关联对象的数据)



返回列表 返回列表
评论

    分享到