发表于: 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代码掺和 功能不丰富(不能分页,不能访问关联对象的数据)
评论