文件名称:
JdbcTemplateTool.zip
开发工具:
文件大小: 36kb
下载次数: 0
上传时间: 2019-07-19
详细说明:
Spring 出品的 JdbcTemplate 对于不想使用hibernate或者ibatis那样需要大量学习成本而且还想获得对象化的人来说是很好用的。但是 JdbcTemplate还是有很多不足之处或者说是缺点。比如你没法像hibernate那样直接传一个对象给它让他拆分成sql并保存起来,当然这也是可以理解的,毕竟它并没有要求你去写 hbm.xml 文件所以无法知道你哪些字段要映射,哪些不要等等。又比如JdbcTemplate 可以帮忙把一个查询结果传化为一个对象列表,但是你需要查阅一些资料才知道要用 BeanPropertyRowMapper 。如果下次要用的时候又忘记了这个类,又要查一次或者翻以前的代码来看,其实完全可以提供一个方法直接传一个PO类进去 自动创建BeanPropertyRowMapper 。基于以上的一些不足之处,我建立了 JdbcTemplateTool 它有以下特性:把查询结果转换为PO列表,不需要调用BeanPropertyRowMapper传一条统计sql比如 aselect count(1) from table可以直接返回一个数字作为结果,不需要自己实现中间步骤。可以直接把一个PO类存到数据库通过PO类和一个id可以获取到该对象通过PO类可以直接update数据库记录不需要实现 BatchPreparedStatementSetter, 就可以批量update通过一个对PO对象删除对应的数据库记录依然可以使用原始的JdbcTemplate目前只在mysql上测试.Maven 依赖 org.crazycake jdbctemplatetool 1.0.4-RELEASE 快速开始STEP 1. 创建一个maven项目 创建一个maven项目叫testjtt. 添加jdbctemplatetool 依赖到pom.xml. 再添加以下依赖到 pom.xml. junit junit 4.11 test org.springframework spring-context 3.2.2.RELEASE test com.mchange c3p0 0.9.2.1 test mysql mysql-connector-java 5.1.19 test org.springframework spring-test 3.2.2.RELEASE test 最好使用 1.6 jdk. 我并没有在 1.5 下测试STEP 2. 创建测试数据库 创建一个测试的数据库叫jtt_test创建一个用户travis不要分配密码. 赋予jtt_test的权限给travis.CREATE USER travis% IDENTIFIED BY ; GRANT ALL ON jtt_test.* TO travis%; flush privileges;创建一张表employee插入一些测试数据.DROP TABLE IF EXISTS `employee`; CREATE TABLE `employee` ( `id` int(11) NOT NULL, `name` varchar(300) NOT NULL, `join_date` datetime NOT NULL, `age` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; /*Data for the table `employee` */ insert into `employee`(`id`,`name`,`join_date`,`age`) values (1,jack,2014-09-22 00:00:00,23),(2,ted,2014-08-30 00:00:00,25),(3,jim,2014-06-22 00:00:00,33);STEP 3. 配置一下spring 在test文件夹下创建resources文件夹. 添加resources到 source folder 修改输出为target/test-classes创建spring.xml在 test/resources 里面 jdbc:mysql://localhost:3306/jtt_test?characterEncoding=utf8 com.mysql.jdbc.Driver travis STEP 4. 创建PO类 创建Employee.javaimport java.sql.Timestamp; import javax.persistence.Id; public class Employee { private Integer id; private String name; private Timestamp joinDate; private Integer age; Id public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Timestamp getJoinDate() { return joinDate; } public void setJoinDate(Timestamp joinDate) { this.joinDate = joinDate; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }STEP 5. 创建测试用例 创建HelloJTTTest.javaimport static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; import java.util.List; import org.crazycake.jdbcTemplateTool.JdbcTemplateTool; import org.junit.Test; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests; ContextConfiguration(locations={"classpath:spring.xml"}) public class HelloJTTTest extends AbstractJUnit4SpringContextTests{ Test public void testSave(){ JdbcTemplateTool jtt = super.applicationContext.getBean("jdbcTemplateTool",JdbcTemplateTool.class); Employee e = new Employee(); e.setId(4); e.setName("billy"); Date now = new Date(); e.setJoinDate(new Timestamp(now.getTime())); e.setAge(33); try { jtt.save(e); } catch (Exception e1) { e1.printStackTrace(); } } }STEP 6. 启动! 运行测试用例,等待绿色条。然后去数据库会看到多了一条记录 :idnamejoin_dateage4billy2014-09-24 22:51:2033高级教程 以下是各个方法的详细介绍list把查询结果转换为PO列表,不需要调用BeanPropertyRowMapper。 自动根据数据库的列将下划线转为驼峰命名规则映射类的属性.Test public void testList(){ JdbcTemplateTool jtt = super.applicationContext.getBean("jdbcTemplateTool",JdbcTemplateTool.class); List es = jtt.list("select * from employee where age < ? order by id desc", new Object[]{30}, Employee.class); assertThat(new Integer(es.size()),is(2)); assertThat(es.get(1).getName(),is("jack")); }count 传一条统计sql比如 aselect count(1) from table可以直接返回一个数字作为结果,不需要自己实现中间步骤。Test public void testCount() throws IOException, SQLException { JdbcTemplateTool jtt = super.applicationContext.getBean("jdbcTemplateTool",JdbcTemplateTool.class); int total = jtt.count("select count(1) from employee", null); assertThat(total,is(4)); }save可以直接把一个PO类存到数据库。如果你不想把某个列映射为数据库字段可以使用 Trasient 注解在getter上public class Student { private Integer id; private String name; private String nothing; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } Transient public String getNothing() { return nothing; } public void setNothing(String nothing) { this.nothing = nothing; } }这个字段会被跳过Test public void testSave() throws Exception { JdbcTemplateTool jtt = super.applicationContext.getBean("jdbcTemplateTool",JdbcTemplateTool.class); Student s = new Student(); s.setName("michael"); s.setNothing("nothing"); jtt.save(s); }get 通过PO类和一个id可以获取到该对象。但是前提是需要在主键的getter上标上 Id 注解Id public Integer getId() { return id; }例子Test public void testGet() throws NoIdAnnotationFoundException, NoColumnAnnotationFoundException, IOException, SQLException { JdbcTemplateTool jtt = super.applicationContext.getBean("jdbcTemplateTool",JdbcTemplateTool.class); Employee e = jtt.get(Employee.class, 3); assertThat(e.getName(),is("jim")); }update 自动根据PO类更新数据库. 记得增加Id.Test public void testUpdate() throws Exception { JdbcTemplateTool jtt = super.applicationContext.getBean("jdbcTemplateTool",JdbcTemplateTool.class); Employee e = jtt.get(Employee.class, 1); e.setAge(23); jtt.update(e); }batchUpdate 批量更新Test public void testBatchUpdate() throws SQLException, IOException { build(); JdbcTemplateTool jtt = super.applicationContext.getBean("jdbcTemplateTool",JdbcTemplateTool.class); List
(系统自动生成,下载前可以参看下载内容)
下载文件列表
相关说明
- 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
- 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度。
- 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
- 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
- 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
- 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.
相关搜索: