日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring之JDBCTemplate

發(fā)布時(shí)間:2023/12/18 javascript 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring之JDBCTemplate 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前些天發(fā)現(xiàn)了一個(gè)巨牛的人工智能學(xué)習(xí)網(wǎng)站,通俗易懂,風(fēng)趣幽默,忍不住分享一下給大家。點(diǎn)擊跳轉(zhuǎn)到教程。

一、Spring對(duì)不同的持久化支持:

Spring為各種支持的持久化技術(shù),都提供了簡單操作的模板和回調(diào)

ORM持久化技術(shù)模板類
JDBCorg.springframework.jdbc.core.JdbcTemplate
Hibernate5.0org.springframework.orm.hibernate5.HibernateTemplate
IBatis(MyBatis)org.springframework.orm.ibatis.SqlMapClientTemplate
JPAorg.springfrmaework.orm.jpa.JpaTemplate

其實(shí)Spring的JDBCTemplate有點(diǎn)像DBUtils,但是有時(shí)候還沒有DBUitls好用。這里來學(xué)習(xí)一下使用Spring的JDBCTemplate來玩一下CRUD。

二、使用JdbcTemplate需要的jar包

在這里使用Spring的JDBCTemplate的時(shí)候先要把輪子拿過來:

除此之外,在Java中操作數(shù)據(jù)庫怎么能不要對(duì)應(yīng)的驅(qū)動(dòng)包呢:

三、JdbcTemplate使用的基本步驟

然后再看看Spring的JDBCTemplate的使用大體步驟,這里有一個(gè)小例子:

1 package com.spring.test;2 3 import org.junit.Test;4 import org.springframework.jdbc.core.JdbcTemplate;5 import org.springframework.jdbc.datasource.DriverManagerDataSource;6 7 public class TestJDBCTemplate {8 9 @Test10 public void test1() {11 12 // JDBC模板依賴于連接池來獲得數(shù)據(jù)的連接,所以必須先要構(gòu)造連接池13 DriverManagerDataSource dataSource = new DriverManagerDataSource();14 dataSource.setDriverClassName("com.mysql.jdbc.Driver");15 dataSource.setUrl("jdbc:mysql://localhost:3306/spring");16 dataSource.setUsername("root");17 dataSource.setPassword("123456");18 19 // 創(chuàng)建JDBC模板20 JdbcTemplate jdbcTemplate = new JdbcTemplate();21 // 這里也可以使用構(gòu)造方法22 jdbcTemplate.setDataSource(dataSource);23 24 // sql語句25 String sql = "select count(*) from user";26 Long num = (long) jdbcTemplate.queryForObject(sql, Long.class);27 28 System.out.println(num);29 30 }31 32 }

四、進(jìn)一步的考慮

其實(shí)這個(gè)例子本身沒有什么的,只是演示了一下,其實(shí)在學(xué)Spring之后,感覺應(yīng)該形成一種習(xí)慣,在new對(duì)象的時(shí)候我要想到IOC,在使用Set方法的時(shí)候,我要想到DI,再去要方便面(哦,不,是切面),我們應(yīng)該想到用AOP的。這里可以在Spring中配置如下的引用鏈:

1. 我要有DataSource,DataSource的屬性可以通過注入數(shù)據(jù)庫的一些配置屬性添加

2. 我要有JdbcTemplate,而Template依賴與DataSource,我要以ref的方式為我的JdbcTemplate注入引用

3. 有了JdbcTemplate之后,我要有Dao,此時(shí)我應(yīng)該在Dao添加一個(gè)JdbcTemplate的成員,然后以ref的方式將JdbcTemplate引入到Dao中

4. 我在Action或者是Servlet中都會(huì)調(diào)用的是Serivce,所以,我在Serivce中要添加一個(gè)Dao作為成員,然后由ref在注入Dao到Service中

DataSource --> JdbcTemplate --> Dao --> Service --> Action/Servlet

"-->"表示將左邊的對(duì)象注入到右邊的對(duì)象當(dāng)中

配置文件如下:

1 <?xml version="1.0" encoding="UTF-8"?>2 <beans xmlns="http://www.springframework.org/schema/beans"3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"4 xmlns:context="http://www.springframework.org/schema/context"5 xmlns:aop="http://www.springframework.org/schema/aop"6 xmlns:tx="http://www.springframework.org/schema/tx"7 xsi:schemaLocation="http://www.springframework.org/schema/beans8 http://www.springframework.org/schema/beans/spring-beans.xsd9 http://www.springframework.org/schema/context10 http://www.springframework.org/schema/context/spring-context.xsd11 http://www.springframework.org/schema/aop12 http://www.springframework.org/schema/aop/spring-aop.xsd13 http://www.springframework.org/schema/tx14 http://www.springframework.org/schema/tx/spring-tx.xsd">15 16 <!-- IOC和DI的注解掃描 -->17 <context:component-scan base-package="com.spring" ></context:component-scan>18 19 <!-- 打開AOP的注解 -->20 <!-- 這里用的是中間的橫線而不是下劃線 -->21 <aop:aspectj-autoproxy></aop:aspectj-autoproxy>22 23 <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" >24 <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/spring_03"></property>25 <property name="driverClass" value="com.mysql.jdbc.Driver"></property>26 <property name="user" value="root"></property>27 <property name="password" value="123456"></property>28 </bean>29 30 <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">31 <property name="dataSource" ref="dataSource"></property>32 </bean>33 34 <bean id="userDao" class="com.spring.dao.UserDao">35 <property name="jdbcTemplate" ref="jdbcTemplate"></property>36 </bean>37 38 <bean id="userService" class="com.spring.service.UserService">39 <property name="userDao" ref="userDao"></property>40 </bean>41 42 </beans>

其中dataSource和jdbcTemplate都是直接配置的,不用寫啥。

然后是UserDao.java

1 package com.spring.dao;2 3 import org.springframework.jdbc.core.JdbcTemplate;4 5 import com.spring.domain.User;6 7 public class UserDao {8 9 private JdbcTemplate jdbcTemplate;10 11 public JdbcTemplate getJdbcTemplate() {12 return jdbcTemplate;13 }14 15 public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {16 this.jdbcTemplate = jdbcTemplate;17 }18 19 public void addUser(User user) {20 21 String sql = "insert into user (username, password) values (?, ?)";22 23 jdbcTemplate.update(sql, user.getUsername(), user.getPassword());24 25 }26 27 }

UserSerice.java

1 package com.spring.service;2 3 import com.spring.dao.UserDao;4 import com.spring.domain.User;5 6 public class UserService {7 8 // 加入userDao作為成員變變量9 private UserDao userDao;10 11 // 注意這里要增加get和set方法12 public UserDao getUserDao() {13 return userDao;14 }15 16 public void setUserDao(UserDao userDao) {17 this.userDao = userDao;18 }19 20 public void addUser(User user) {21 userDao.addUser(user);22 }23 }

上面的文件都是用的配置文件來獲得對(duì)象的,而沒有使用注解。

測試類:

1 package com.spring.test;2 3 import org.junit.Test;4 import org.springframework.context.ApplicationContext;5 import org.springframework.context.support.ClassPathXmlApplicationContext;6 import com.spring.domain.User;7 import com.spring.service.UserService;8 9 public class TestJDBCTemplate {10 11 @Test12 public void test2() {13 14 ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml");15 UserService userService = (UserService) ctx.getBean("userService");16 17 User user = new User();18 user.setPassword("111");19 user.setUsername("小王");20 21 userService.addUser(user);22 23 }24 25 }

哦,對(duì)了其中配置的數(shù)據(jù)源是C3P0的數(shù)據(jù)源,還要導(dǎo)入C3P0的包:

五、JdbcTemplate的CRUD方法

1. 插入數(shù)據(jù)

1 public void addUser(User user) {2 3 String sql = "insert into user (username, password) values (?, ?)";4 5 jdbcTemplate.update(sql, user.getUsername(), user.getPassword());6 7 }

如上,插入代碼用的是update方法,其實(shí)增刪改用的都是update方法,而查詢則是和query相關(guān)的方法。

2. 刪除操作

1 public void deleteUser( ) {2 String sql = "delete from user where username= ?";3 jdbcTemplate.update(sql, "小王");4 }

3. 修改操作

1 public void updateUser(User user) {2 String sql = "update user set username=? where username= ?";3 jdbcTemplate.update(sql, user.getUsername() + "_new", user.getUsername());4 }

4. 查詢操作

上面三個(gè)都比較簡單,查詢倒是有些復(fù)雜。在使用比較基礎(chǔ)的持久化工具的時(shí)候,比如DBUtils都會(huì)針對(duì)查詢結(jié)果給我們提供一些封裝的接口和類,但是JdbcTemplate只給我們提供了接口,并沒有可用的類,所以我們需要自己寫實(shí)現(xiàn)類來進(jìn)行封裝。這里會(huì)學(xué)習(xí)使用JdbcTemplate進(jìn)行三種查詢操作:

4.a. 查詢表的記錄數(shù)

1 @Test2 public void test5() {3 ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml");4 JdbcTemplate jdbcTemplate = (JdbcTemplate) ctx.getBean("jdbcTemplate");5 String sql = "select count(*) from user";6 Long row = jdbcTemplate.queryForObject(sql, Long.class);7 System.out.println("查詢出來的記錄數(shù)為:" + row);8 }

4.b. 查詢返回對(duì)象

1 @Test2 public void test6() {3 // 獲得jdbcTemplate對(duì)象4 ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml");5 JdbcTemplate jdbcTemplate = (JdbcTemplate) ctx.getBean("jdbcTemplate");6 String sql = "select username, password from user where username = ?";7 // 設(shè)定參數(shù)8 Object[] object = {"mary_new"};9 // 進(jìn)行查詢10 User user = jdbcTemplate.queryForObject(sql, object, new UserMapper());11 System.out.println(user);12 }

除此之外要實(shí)現(xiàn)結(jié)構(gòu)RowMapper來新建一個(gè)映射類:

1 package com.spring.test;2 3 import java.sql.ResultSet;4 import java.sql.SQLException;5 6 import org.springframework.jdbc.core.RowMapper;7 8 import com.spring.domain.User;9 10 public class UserMapper implements RowMapper<User>{11 12 @Override13 public User mapRow(ResultSet resultSet, int rows) throws SQLException {14 User user = new User();15 user.setUsername(resultSet.getString(1));16 user.setPassword(resultSet.getString(2));17 18 return user;19 }20 21 }

要注意這個(gè)UserMapper.java應(yīng)該要和具體的Sql語句對(duì)應(yīng)。

4.c. 查詢并返回List集合

1 @Test2 public void test7() {3 // 獲得jdbcTemplate對(duì)象4 ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml");5 JdbcTemplate jdbcTemplate = (JdbcTemplate) ctx.getBean("jdbcTemplate");6 7 // sql語句8 String sql = "select * from user";9 List<User> users = jdbcTemplate.query(sql, new UserMapper());10 11 for(User u: users) {12 System.out.println(u);13 }14 }

?

總結(jié)

以上是生活随笔為你收集整理的Spring之JDBCTemplate的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。