Spring03-jdbc
1,Spring集成Jdbc,需要导入spring包和数据库驱动包,这里我们使用的是mysql驱动包
2,选择一个数据源(DBCP,C3P0),这里我们使用DBCP,需要导入DBCP驱动包
3,创建jdbc.properties文件,设置数据库的连接信息
3,在beans.xml中导入相应的properties文件
4,写相应的dao,并且为这个dao创建jdbcTemplate对象,它需要DataSource构造
--实体类:
package com.yangw.spring.model; public class User { private int id; private String name; private int age; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } /** * * create table t_user( id int auto_increment primary key , name varchar(50), age int ); */ }
--UserDao接口与实现类
package com.yangw.spring.dao; import java.util.List; import com.yangw.spring.model.User; public interface IUserDao { public void addUser(User user); public void delUser(int id); public User loadUser(int id); public List<User> loadAllUser(); }
package com.yangw.spring.dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.List; import javax.annotation.Resource; import javax.sql.DataSource; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.PreparedStatementCreator; import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.support.GeneratedKeyHolder; import org.springframework.jdbc.support.KeyHolder; import org.springframework.jdbc.support.rowset.SqlRowSet; import org.springframework.stereotype.Repository; import com.yangw.spring.model.User; @Repository("userJdbcDao") public class UserDao implements IUserDao { private JdbcTemplate jdbcTemplate; @Resource //注入dataSoucre public void setDataSource(DataSource dataSource){ jdbcTemplate=new JdbcTemplate(dataSource); } @Override public void addUser(final User user) { //插入一条数据,但是自增的主键id没法得到 //jdbcTemplate.update("insert into t_user(name,age) values(?,?)",user.getName(),user.getAge()); final String sql="insert into t_user(name,age) values(?,?)"; //获取自增的key的方法 KeyHolder keyHolder = new GeneratedKeyHolder(); jdbcTemplate.update( new PreparedStatementCreator() { public PreparedStatement createPreparedStatement(Connection conn) throws SQLException { PreparedStatement ps =conn.prepareStatement(sql,new String[]{"id"}); ps.setString(1, user.getName()); ps.setInt(2, user.getAge()); return ps; } }, keyHolder); System.out.println(keyHolder.getKey()); } @Override public void delUser(int id) { jdbcTemplate.update("delete from t_user where id=?",id); } @Override public User loadUser(int id) { String sql="select * from t_user where id=?"; return jdbcTemplate.queryForObject(sql, new Object[]{id}, new UserMapper()); } @Override public List<User> loadAllUser() { //获取记录数 String sql1="select count(*) from t_user"; int count=jdbcTemplate.queryForInt(sql1); System.out.println("count:"+count); //获取记录的一个字段值 String sql2="select name from t_user"; List<String> names=jdbcTemplate.queryForList(sql2, String.class); for(String name:names){ System.out.println("name--->"+name); } //获取记录的几个字段的值 String sql3="select name,age from t_user"; SqlRowSet sqlRowSet=jdbcTemplate.queryForRowSet(sql3); while(sqlRowSet.next()){ System.out.println("name--->"+sqlRowSet.getString("name")+"--age-->"+sqlRowSet.getInt("age")); } //获取所有记录 String sql="select * from t_user"; return jdbcTemplate.query(sql, new UserMapper()); } /** * 在多个地方用的话,建议写成内部类,而不是匿名内部类 * 如果在外部也会大量使用,建议写成独立的一个类 * @author Administrator * */ private class UserMapper implements RowMapper<User>{ @Override public User mapRow(ResultSet rs, int rowNum) throws SQLException { User user=new User(); user.setId(rs.getInt("id")); user.setName(rs.getString("name")); user.setAge(rs.getInt("age")); System.out.println(rowNum+"rowNum"); //rowNum是每次迭代的下标 return user; } } }
--测试类
package com.yangw.spring.test; import java.util.List; import javax.annotation.Resource; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import com.yangw.spring.dao.IUserDao; import com.yangw.spring.model.User; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("/beans.xml") /** * 当使用了@RunWith,@ContextConfiguration注解之后,就可以直接在Test中进行依赖注入 * @author Administrator */ public class TestJdbc { @Resource private IUserDao userJdbcDao; @Test public void testJdbc(){ User user=new User(); user.setName("lisi"); user.setAge(20); userJdbcDao.addUser(user); } @Test public void testLoadUser(){ User user=userJdbcDao.loadUser(1); System.out.println(user.getName()); } @Test public void testLoadAllUsers(){ List<User> users=userJdbcDao.loadAllUser(); System.out.println(users.size()); } }
--配置文件bean.xml
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <!--1, 打开Spring的annotation --> <context:annotation-config/> <!-- 2, 设定Spring去那些包中找annotation --> <context:component-scan base-package="com.yangw.spring" /> <!-- 使用dbcp没有成功, 加的是commons-dbcp-1.4.jar class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 因此使用下面的spring框架提供的作了测试 --> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" > <property name="driverClassName" value="${jdbc.driverClassName}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </bean> <context:property-placeholder location="jdbc.properties"/> </beans>
--jdbc.properties文件
jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/spring_test jdbc.username=root jdbc.password=123456
Spring03-jdbc的更多相关文章
- JAVAEE——spring03:spring整合JDBC和aop事务
一.spring整合JDBC 1.spring提供了很多模板整合Dao技术 2.spring中提供了一个可以操作数据库的对象.对象封装了jdbc技术. JDBCTemplate => JDBC模 ...
- Java数据库连接技术——JDBC
大家好,今天我们学习了Java如何连接数据库.之前学过.net语言的数据库操作,感觉就是一通百通,大同小异. JDBC是Java数据库连接技术的简称,提供连接各种常用数据库的能力. JDBC API ...
- 玩转spring boot——结合AngularJs和JDBC
参考官方例子:http://spring.io/guides/gs/relational-data-access/ 一.项目准备 在建立mysql数据库后新建表“t_order” ; -- ----- ...
- [原创]java使用JDBC向MySQL数据库批次插入10W条数据测试效率
使用JDBC连接MySQL数据库进行数据插入的时候,特别是大批量数据连续插入(100000),如何提高效率呢?在JDBC编程接口中Statement 有两个方法特别值得注意:通过使用addBatch( ...
- JDBC MySQL 多表关联查询查询
public static void main(String[] args) throws Exception{ Class.forName("com.mysql.jdbc.Driver&q ...
- JDBC增加删除修改
一.配置程序--让我们程序能找到数据库的驱动jar包 1.把.jar文件复制到项目中去,整合的时候方便. 2.在eclipse项目右击"构建路径"--"配置构建路径&qu ...
- JDBC简介
jdbc连接数据库的四个对象 DriverManager 驱动类 DriverManager.registerDriver(new com.mysql.jdbc.Driver());不建议使用 ...
- JDBC Tutorials: Commit or Rollback transaction in finally block
http://skeletoncoder.blogspot.com/2006/10/jdbc-tutorials-commit-or-rollback.html JDBC Tutorials: Com ...
- FineReport如何用JDBC连接阿里云ADS数据库
在使用FineReport连接阿里云的ADS(AnalyticDB)数据库,很多时候在测试连接时就失败了.此时,该如何连接ADS数据库呢? 我们只需要手动将连接ads数据库需要使用到的jar放置到%F ...
- JDBC基础
今天看了看JDBC(Java DataBase Connectivity)总结一下 关于JDBC 加载JDBC驱动 建立数据库连接 创建一个Statement或者PreparedStatement 获 ...
随机推荐
- WeQuant交易策略—EMA指标
策略名称:EMA指标策略关键词:指数移动平均.双均线.动态止损.方法:1)用快慢两条指数移动平均线的交叉作为买入卖出信号:2)快线自下而上穿过慢线,买入:自上而下穿过慢线,卖出:3)持仓期间计算净值的 ...
- Spring框架IOC,DI概念理解
1.什么是框架? 框架是一种重复使用的解决方案,针对某个软件开发的问题提出的. Spring框架,它是一个大型的包含很多重复使用的某个领域的解决方案. Spring的理念:不要重复发明轮子. 2.Sp ...
- latex 生成pdf
我个人还是比较推崇传统的方法:先生成dvi,在生成pdf. 直接在winEdt中点击最下方的Windows Command Prompt, 否则从cmd进入命令行的话,还要进入tex文件夹,好麻烦. ...
- Java并发编程-阻塞队列
Java concurrent 包中BlockingQueue接口有ArrayBlockingqueue.LinkedBlockingQueue.PriorityBlockingQueue.Synch ...
- python 关于列表的增删改查及个别的命令
names = ["a","b","c","d","e","e","a ...
- DispatcherTimer和Timer(计时器)
System.Windows.Threading.DispatcherTimer dTime; System.Timers.Timer timer; public Main ...
- Vue双向数据绑定原理解析
基本原理 Vue.采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的setter和getter,数据变动时发布消息给订阅者,触发相应函数的回调 ...
- struts.xml如何加载到及配置问题
今天项目做客户化处理,看到struts.xml,突然间想不起来这个文件从哪里加载的了,真是越学越回去了.这里记录下. web工程启动的时候,系统会加载web.xml文件,在这个时候会加载Spring的 ...
- 打开safari开发者选项
1.点击Safari启动浏览器 2.点击左上Safari标志,选择偏好设置 3.选择高级,勾选下方的在菜单栏显示开发菜单. 如此,Safari就出现了开发菜单,右键网页元素也会出现查看元素功能了.
- svn: Can't convert string from 'UTF-8' to native
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt227 svn 版本库中有文件是以中文字符命名的,在 Linux 下 chec ...