Spring学习记录(十四)---JDBC基本操作
2016-08-31 12:03
381 查看
先看一些定义:
在Spring JDBC模块中,所有的类可以被分到四个单独的包:
1、core
即核心包,它包含了JDBC的核心功能。此包内有很多重要的类,包括:JdbcTemplate类、SimpleJdbcInsert类,SimpleJdbcCall类,以及NamedParameterJdbcTemplate类。
2、datasource
即数据源包,访问数据源的实用工具类。它有多种数据源的实现,可以在JavaEE容器外部测试JDBC代码。
3、object
即对象包,以面向对象的方式访问数据库。它允许执行查询并返回结果作为业务对象。它可以在数据表的列和业务对象的属性之间映射查询结果。
4、support
即支持包,是core包和object包的支持类。例如提供了异常转换功能的SQLException类。
Spring中的JDBC帮我们做很多事情,如定义数据库连接参数,打开数据库连接,处理异常,关闭数据库连接。
我们只需要关心SQL语句,也就是增删改查。就行
连接数据库,一般都用xml配置
资源文件:
main函数
这样就能连接上数据库了。
处理SQL语句的是core包中的类,也要在xml中配置,这里说一下,最多是使用 jdbcTemplate
1、JdbcTemplate
获取jdbcTemplate和NamedParameterJdbcTemplate对象
如何获取一条数据?应该要把它取出放在一个对象里面吧。
为了能取出数据,必须创建一个对象专门用来存放,
获取id大于5的所有数据
2、NamedParameterJdbcTemplate--具名参数 ,可以给参数命名,不用像上面一样都是问号 "?"作参数。参数多了的话,更便于维护
再看这个,也可以用对象存入。
在Spring JDBC模块中,所有的类可以被分到四个单独的包:
1、core
即核心包,它包含了JDBC的核心功能。此包内有很多重要的类,包括:JdbcTemplate类、SimpleJdbcInsert类,SimpleJdbcCall类,以及NamedParameterJdbcTemplate类。
2、datasource
即数据源包,访问数据源的实用工具类。它有多种数据源的实现,可以在JavaEE容器外部测试JDBC代码。
3、object
即对象包,以面向对象的方式访问数据库。它允许执行查询并返回结果作为业务对象。它可以在数据表的列和业务对象的属性之间映射查询结果。
4、support
即支持包,是core包和object包的支持类。例如提供了异常转换功能的SQLException类。
Spring中的JDBC帮我们做很多事情,如定义数据库连接参数,打开数据库连接,处理异常,关闭数据库连接。
我们只需要关心SQL语句,也就是增删改查。就行
连接数据库,一般都用xml配置
<!-- 导入资源文件 --> <context:property-placeholder location="class:db.properties"/> <!-- 配置c3p0数据源 --> <bean id="dataSource" class="com.mchange.v2.c3p0ComboPooledDataSource"> <property name="user" value="${jdbc.user}"></property> <property name="password" value="${jdbc.password}"></property> <property name="driverClass" value="${jdbc.driverClass}"></property> <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property> <property name="initPoolSize" value="${jdbc:initPoolSize}"></property> <property name="maxPoolSize" value="${jdbc:maxPoolSize}"></property> </bean>
资源文件:
1 jdbc:user=root jdbc:password=1230 jdbc:driverClass=com.mysql.jdbc.Driver jdbc:jdbcUrl=jdbc:mysql:///spring4 jdbc:initPoolSize=5 jdbc:maxPoolSize=10
main函数
public void main() { ApplicationContext ctx=new ClassPathXmlApplicationContext("jdbc.xml"); DataSource dataource = ctx.getBean(DataSource.class); System.out.println(dataource.getConnection()); }
这样就能连接上数据库了。
处理SQL语句的是core包中的类,也要在xml中配置,这里说一下,最多是使用 jdbcTemplate
1、JdbcTemplate
<!-- 配置Spring的JdbcTemplate,数据源作它的属性--> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"></property> </bean> <!-- 配置NamedParameterJdbcTemplate,可以为参数命名。其没有无参构造函数,所以要指定参数 --> <bean id="namedParameterJdbcTemplate" class="org.springframework.jdbc.core.nameparam.NamedParameterJdbcTemplate"> <constructor-arg ref="dataSource"></constructor-arg> </bean>
获取jdbcTemplate和NamedParameterJdbcTemplate对象
JdbcTemplate jdbcTemplate=(JdbcTemplate) ctx.getBean("jdbcTemplate"); NamedParameterJdbcTemplate namedParameterJdbcTemplate=(NamedParameterJdbcTemplate) ctx.getBean("namedParameterJdbcTemplate");
//更新一条记录 @Test public void testUpdate(){ String sql="UPDATE employees SET last_name = ? WHERE id = ?"; jdbcTemplate.update(sql,"jack",5); }
/* * 获取单个列的总数 */ @Test public void testQueryForObject2(){ String sql="SELECT count(id) FROM employees"; long count=jdbcTemplate.queryForObject(sql,Long.class); System.out.println(count); }
如何获取一条数据?应该要把它取出放在一个对象里面吧。
为了能取出数据,必须创建一个对象专门用来存放,
1 //用来存放数据的类,一条数据就是一个对象 public class Employee { private int id; private String lastName; private String email; private Template template; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; }
/*从数据库获取一条记录,实际得到对应一个对象 * 注意不是调用queryForObject(String sql, Class<Employee> requiredType,..) * 而是调用queryForObject(String sql, RowMapper<Employee> rowMapper) * 1.其中的RowMapper指定如何去映射结果集的行,常用的实现类为BeanPropertyRowMapper * 2.使用sql中列的别名完成列名和类的属性名的映射,last_name lastName * 3.不支持级联映射,Employee类一个属性是一个对象,那这个对象不能被级联映射获取 */ @Test public void testQueryForObject(){ String sql="SELECT id,last_name lastName,email FROM employees WHERE id = ?"; RowMapper<Employee> rowMapper=new BeanPropertyRowMapper<>(Employee.class);//完成一条数据和一个对象属性的映射 Employee employee=jdbcTemplate.queryForObject(sql, rowMapper,1); //1是参数,就是id的参数 }
获取id大于5的所有数据
/* * 查到实体类的集合 */ public void testQueryForList(){ String sql="SELECT id,last_name lastName,email FROM employees WHERE id > ?"; RowMapper<Employee> rowMapper=new BeanPropertyRowMapper<>(Employee.class); List<Employee> employee=jdbcTemplate.query(sql, rowMapper,5); System.out.println(employee); }
//批量处理 //最后一个参数是Object[]的List类型,因为修改一条记录需要一个Object的数组,那么多条就需要多个Object的数组 @Test public void testBatchUpdate(){ String sql="INSERT INTO employees(last_name,email,dept_id) VALUES(?,?,?)"; //使用数组集合 List<Object[]> batchArgs=new ArrayList<>(); batchArgs.add(new Object[]{"AA","aa@atguigu.com",1});//一条数据就是一个对象数组 batchArgs.add(new Object[]{"BB","bb@atguigu.com",2}); batchArgs.add(new Object[]{"CC","cc@atguigu.com",3}); batchArgs.add(new Object[]{"DD","dd@atguigu.com",3}); batchArgs.add(new Object[]{"EE","ee@atguigu.com",2}); jdbcTemplate.update(sql,batchArgs); }
2、NamedParameterJdbcTemplate--具名参数 ,可以给参数命名,不用像上面一样都是问号 "?"作参数。参数多了的话,更便于维护
/* * 参数名要对应一个值,就要使用键值对。用HashMap */ @Test public void testNamedParameterJdbcTemplate(){ String sql="INSERT INTO employees(lase_name,email,dept_id) VALUES(:lastName,:email,:deptId)"; Map<String,Object> paramMap=new HashMap<>(); paramMap.put("lastName", "FF"); paramMap.put("email", "FF@aa.com"); paramMap.put("deptId", 2); namedParameterJdbcTemplate.update(sql, paramMap); }
再看这个,也可以用对象存入。
/* * 可以对参数命名,用对象传入 */ @Test public void testNamedParameterJdbcTemplate2(){ String sql="INSERT INTO employees(lase_name,email,dept_id) VALUES(:lastName,:email,:deptId)"; Employee employee=new Employee(); employee.setLastName("SYZ"); employee.setEmail("ee@e.com"); employee.setId(3); SqlParameterSource paramSource=new BeanPropertySqlParameterSource(employee);//完成一条数据和一个对象属性的映射 namedParameterJdbcTemplate.update(sql, paramSource); }
相关文章推荐
- Spring4学习笔记-SpringJDBC基本操作(补充)
- Spring4学习笔记-SpringJDBC基本操作(补充)
- jqGrid分页技术学习(五)spring jdbc 通用DAO——修改一条记录
- MYSQL入门学习之十四:游标的基本操作
- Spring学习心得(22)-- spring声明式事务处理(使用jdbc操作数据库)
- Swift学习记录 -- 7.数组的基本操作
- jqGrid分页技术学习(六)spring jdbc 通用DAO——查询所有记录
- Linux学习记录(6)磁盘分区的基本操作
- Spring JDBC模版基本操作示例
- Spring JDBC模版基本操作示例
- Spring4 学习系列之——jdbc事务的基本实现和了解
- SAP MM学习指南操作记录—1.MM基本配置
- 学习笔记_JDBC_1_Demo1_连接数据库的基本操作和步骤
- Java JDBC学习实战(一): JDBC的基本操作
- javascript学习记录——canvas元素的基本操作
- jqGrid分页技术学习(三)spring jdbc 通用DAO——添加一条记录
- Delphi7学习基本数据格式和开发操作记录
- Maven学习记录之maven基本操作命令,maven本地工厂的创建,maven骨架的生成,以及在eclipse中创建maven工程:
- 学习笔记_JDBC_1_Demo1_连接数据库的基本操作和步骤
- Swift学习记录 -- 8.字典的基本操作