1.Spring JDBC 數據訪問
Spring JDBC是Spring所提供的持久層技術,它的主要目標是降低使用JDBC API的門檻,以一種更直接,更簡介,更簡單的方式使用JDBC API, 在Spring JDBC裏,僅需做那些與業務相關的DML操作,而將資源獲取,Statment創建,資源釋放以及異常處理等繁雜而乏味的工作交給Spring JDBC..
雖然ORM的框架已經成熟豐富,但是JDBC的靈活,直接的特性,依然讓他擁有自己的用武之地,如在完全依賴查詢模型動態產生查詢語句的綜合查詢系統中,Hibernaye,MyBatis,JPA等框架都無法使用,這裏JDBC是唯一的選擇.
2.JdbcTemplate 的使用
1.導入jar包
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.37</version> </dependency> <dependency> <groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> <version>0.9.5.2</version> </dependency> <!-- 配置的 spring-jdbc --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>4.3.18.RELEASE</version> </dependency>
2.測試 JdbcTemplate的使用
public void test() { //創建一個連接池 ComboPooledDataSource comboPooledDataSource=new ComboPooledDataSource(); try { comboPooledDataSource.setDriverClass("com.mysql.jdbc.Driver"); comboPooledDataSource.setJdbcUrl("jdbc:mysql://localhost:3306/ssm"); comboPooledDataSource.setUser("root"); comboPooledDataSource.setPassword("123"); //2.創建JdbcTemplate對象 JdbcTemplate jdbcTemplate=new JdbcTemplate(comboPooledDataSource); //3.執行sql String sql="insert into users values(null,?,?)"; jdbcTemplate.update(sql,"daimenglaoshi","123"); } catch (PropertyVetoException e) { e.printStackTrace(); } }
3.用spring 創建ComboPooledDataSource和JdbcTemplate對象
3.1添加ioc相關jar包
<!-- 導入spring的核心jar包 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.3.18.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>4.3.18.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.3.18.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>4.3.18.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-expression</artifactId> <version>4.3.18.RELEASE</version> </dependency>
3.2創建db.properties文件
driverClass=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/ssm user=root password=123
3.3在applicationContext.xml文件中創建對象
<!-- 導入db.properties文件 --> <context:property-placeholder location="db.properties"></context:property-placeholder> <!-- 創建一個連接池對象 --> <bean id="comboPooledDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="${driverClass}" /> <property name="jdbcUrl" value="${url}"/> <property name="user" value="${user}" /> <property name="password" value="${password}" /> </bean> <!-- 創建一個jdbcTemplate對象 並且通過構造函數 將連接池對象 注入到jdbcTemplate --> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" > <constructor-arg name="dataSource" ref="comboPooledDataSource" /> </bean>
3.4 修改dao 層
@Component public class UsersDao implements IUsersDao { //注入jdbcTemplate對象 @Autowired private JdbcTemplate jdbcTemplate; public JdbcTemplate getJdbcTemplate() { return jdbcTemplate; } public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } //update方法 (增 刪 改) @Override public void add(Users user) { String sql = "insert into users values(null,?,?)"; jdbcTemplate.update(sql, user.getUname(), user.getPassword()); }
3.5測試
@Test public void test() { ClassPathXmlApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml"); IUsersDao usersDao= applicationContext.getBean("usersDao",IUsersDao.class); Users user=new Users("xiaowanglaoshi","123"); usersDao.add(user); }
4.JdbcTemplate 常用方法
update:
實現增刪改
//update方法 (增 刪 改) @Override public void add(Users user) { String sql = "insert into users values(null,?,?)"; jdbcTemplate.update(sql, user.getUname(), user.getPassword()); }
queryForObject:
查詢的結果是一個對象或單個值
//測試 根據id號查詢 public Users selectUsersById(int uid) { String sql="select * from users where uid=?"; //查詢 單行數據 Users user= jdbcTemplate.queryForObject(sql, new Object[]{uid}, new RowMapper<Users>() { @Override public Users mapRow(ResultSet resultSet, int i) throws SQLException { return rowMapHandler(resultSet); } }); return user; } //自己組裝對象 public Users rowMapHandler(ResultSet resultSet) throws SQLException { Users user=new Users(); user.setUid(resultSet.getInt("uid")); user.setUname(resultSet.getString("uname")); user.setPassword(resultSet.getString("password")); return user; }
查詢的結果是一個數值
public int selectUsersCount() { String sql = "select count(*) from users"; int num = jdbcTemplate.queryForObject(sql, Integer.class); return num; }
query
//查詢 返回集合 public List<Users> selectUsers() { String sql = "select * from users"; List<Users> usersList= jdbcTemplate.query(sql, new RowMapper<Users>() { //遍歷結果集 將結果集中的每條數據 組裝成Users對象 @Override public Users mapRow(ResultSet resultSet, int i) throws SQLException { return rowMapHander(resultSet); } }); return usersList; } //自己組裝對象 public Users rowMapHander(ResultSet resultSet) throws SQLException { Users user=new Users(); user.setUid(resultSet.getInt("uid")); user.setUname(resultSet.getString("uname")); user.setPassword(resultSet.getString("password")); return user; }