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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

javascript

Mybatis和Spring整合

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

一、dao接口+實(shí)現(xiàn)類的方式

  1、先創(chuàng)建好整合工程結(jié)構(gòu)

  

  2、對(duì)于Spring和Mybatis 整合,我們先從數(shù)據(jù)庫(kù)開(kāi)始,即先創(chuàng)建一張簡(jiǎn)單的數(shù)據(jù)表,Sql如下

CREATE TABLE `t_user` (`id` INT(10) NOT NULL AUTO_INCREMENT,`username` VARCHAR(100) DEFAULT NULL,`password` VARCHAR(100) DEFAULT NULL,`address` VARCHAR(100) DEFAULT NULL,`sex` VARCHAR(10) DEFAULT NULL,PRIMARY KEY (`id`) ) ENGINE=INNODB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8復(fù)制代碼

  然后根據(jù)從上面的數(shù)據(jù)表創(chuàng)建對(duì)應(yīng)的實(shí)體類

1 package cn.test.ssm.po;2 3 import java.io.Serializable;4 5 public class User implements Serializable {6 private int id;7 private String username;8 private String password;9 private String address; 10 private String sex; 11 12 public int getId() { 13 return id; 14 } 15 16 public String getUsername() { 17 return username; 18 } 19 20 public String getPassword() { 21 return password; 22 } 23 24 public String getAddress() { 25 return address; 26 } 27 28 public String getSex() { 29 return sex; 30 } 31 32 public void setId(int id) { 33 this.id = id; 34 } 35 36 public void setUsername(String username) { 37 this.username = username; 38 } 39 40 public void setPassword(String password) { 41 this.password = password; 42 } 43 44 public void setAddress(String address) { 45 this.address = address; 46 } 47 48 public void setSex(String sex) { 49 this.sex = sex; 50 } 51 52 public User(String username, String password, String address, String sex) { 53 this.username = username; 54 this.password = password; 55 this.address = address; 56 this.sex = sex; 57 } 58 59 public User() { 60 } 61 62 @Override 63 public String toString() { 64 return "User{" + 65 "id=" + id + 66 ", username='" + username + '\'' + 67 ", password='" + password + '\'' + 68 ", address='" + address + '\'' + 69 ", sex='" + sex + '\'' + 70 '}'; 71 } 72 }復(fù)制代碼

  3、然后我們開(kāi)始配置Mybatis的相關(guān)配置文件,具體有Mybatis的核心配置文件SqlMapConfig.xml

1 <?xml version="1.0" encoding="UTF-8" ?>2 <!DOCTYPE configuration3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN"4 "http://mybatis.org/dtd/mybatis-3-config.dtd">5 <configuration>6 7 <typeAliases>8 <!--批量別名定義:Mybatis在定義別名的時(shí)候會(huì)自動(dòng)掃描包中的po類,自動(dòng)的將別名定義為類名(首字母大寫或者小寫都可以)-->9 <package name="cn.test.ssm.po"></package> 10 </typeAliases> 11 12 <!--配置一個(gè)SQL語(yǔ)句和映射的配置文件--> 13 <mappers> 14 <mapper resource="sqlmap/UserMapper.xml" /> 15 </mappers> 16 17 </configuration>復(fù)制代碼

  然后就是配置UserMapper.xml映射文件,由于只是測(cè)試Spring和Mybatis的整合,所以可以只是實(shí)現(xiàn)相對(duì)簡(jiǎn)單的功能,這樣的話,UserMapper配置文件也就比較簡(jiǎn)單

1 <?xml version="1.0" encoding="UTF-8" ?>2 <!DOCTYPE mapper3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">5 <!--mapper為根元素,namespace指定了命名空間-->6 <mapper namespace="test">7 8 <select id="findUserById" parameterType="int" resultType="cn.test.ssm.po.User">9 SELECT * FROM t_user WHERE id = #{id} 10 </select> 11 12 </mapper>復(fù)制代碼

  4、下來(lái)就是根據(jù)UserMapper中的statment實(shí)現(xiàn)的功能,寫dao接口文件

1 package cn.test.ssm.dao; 2 3 import cn.test.ssm.po.User; 4 5 public interface UserDao { 6 7 public User findUserById(int id) throws Exception; 8 }復(fù)制代碼

  5、我們編寫dao接口的實(shí)現(xiàn)類。在dao接口的實(shí)現(xiàn)類過(guò)程中,我們需要知道,由于Spring整合Mybatis的原因,Spring需要管理SqlSessionFactory,而實(shí)現(xiàn)類方法中需要得到這個(gè)SqlSessionFactory,這里我們可以繼承SqlSessionDaoSupport這個(gè)類,我們看一下這個(gè)類中的方法

  6、下來(lái)我們就具體的配置applicationContext配置文件,其中需要配置數(shù)據(jù)庫(kù)信息,加載其他的配置文件,管理配置SqlSessionFactory(要加載Mybatis核心配置文件),然后我們管理UserDao接口的bean,同上面分析的,就需要配置SqlSessionFactory這個(gè)屬性

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="8 http://www.springframework.org/schema/beans9 http://www.springframework.org/schema/beans/spring-beans.xsd 10 http://www.springframework.org/schema/aop 11 http://www.springframework.org/schema/aop/spring-aop.xsd 12 http://www.springframework.org/schema/context 13 http://www.springframework.org/schema/context/spring-context.xsd 14 http://www.springframework.org/schema/tx 15 http://www.springframework.org/schema/tx/spring-tx.xsd"> 16 17 18 <!--加載數(shù)據(jù)庫(kù)信息的配置文件--> 19 <context:property-placeholder location="classpath:db.properties"></context:property-placeholder> 20 21 <!--配置數(shù)據(jù)源--> 22 <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> 23 <property name="driverClass" value="${jdbc.driver}" /> 24 <property name="jdbcUrl" value="${jdbc.url}" /> 25 <property name="user" value="${jdbc.username}" /> 26 <property name="password" value="${jdbc.password}" /> 27 </bean> 28 29 <!--配置SqlSessionFactory--> 30 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 31 <!--加載Mybatis的配置文件--> 32 <property name="configLocation" value="mybatis/SqlMapConfig.xml"></property> 33 <!--配置數(shù)據(jù)源--> 34 <property name="dataSource" ref="dataSource"></property> 35 </bean> 36 37 <!--配置Dao接口--> 38 <bean id="userDao" class="cn.test.ssm.dao.UserDaoImpl"> 39 <property name="sqlSessionFactory" ref="sqlSessionFactory"></property> 40 </bean> 41 </beans>復(fù)制代碼

  7、編寫好applicationContext之后,就開(kāi)始實(shí)現(xiàn)UserDao這個(gè)接口,也是如同上面的分析,實(shí)現(xiàn)SqlSessionDaoSupport這個(gè)抽象類,從而得到SqlSessionFactory,在方法體內(nèi)獲取SqlSession

1 package cn.test.ssm.dao;2 3 import cn.test.ssm.po.User;4 import org.apache.ibatis.session.SqlSession;5 import org.mybatis.spring.support.SqlSessionDaoSupport;6 7 public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao{8 9 // SqlSessionDaoSupport中有 public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) 方法 10 11 @Override 12 public User findUserById(int id) throws Exception { 13 SqlSession sqlSession = getSqlSession(); //SqlSessionDaoSupport中有private SqlSession sqlSession;這個(gè)屬性和方法 14 User user = sqlSession.selectOne("test.findUserById",1); 15 //使用spring來(lái)記性管理,在方法結(jié)束的時(shí)候就會(huì)自己關(guān)閉SqlSession 16 return user; 17 } 18 }復(fù)制代碼

  8、編寫相應(yīng)的Junit進(jìn)行測(cè)試

1 package cn.test.ssm.dao;2 3 import cn.test.ssm.po.User;4 import org.apache.ibatis.session.SqlSession;5 import org.mybatis.spring.support.SqlSessionDaoSupport;6 7 public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao{8 9 // SqlSessionDaoSupport中有 public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) 方法 10 11 @Override 12 public User findUserById(int id) throws Exception { 13 SqlSession sqlSession = getSqlSession(); //SqlSessionDaoSupport中有private SqlSession sqlSession;這個(gè)屬性和方法 14 User user = sqlSession.selectOne("test.findUserById",1); 15 //使用spring來(lái)記性管理,在方法結(jié)束的時(shí)候就會(huì)自己關(guān)閉SqlSession 16 return user; 17 } 18 }復(fù)制代碼

  通過(guò)上面的測(cè)試程序得到結(jié)果


二、通過(guò)mapper代理方式

  1、mapper代理的方式進(jìn)行整合,實(shí)際上比較重要的就是mapper接口和mapper配置文件在同一包下,且文件名相同即可,下面是使用mapper代理的方式的結(jié)構(gòu)

  

  2、然后我么來(lái)配置UserMapper配置文件,需要注意的就是這個(gè)配置文件中需要將namespace設(shè)置為Mapper接口的路徑

1 <?xml version="1.0" encoding="UTF-8" ?>2 <!DOCTYPE mapper3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">5 <!--mapper為根元素,namespace指定了命名空間-->6 <mapper namespace="cn.test.ssm.mapper.UserMapper">7 8 <select id="findUserById" parameterType="int" resultType="cn.test.ssm.po.User">9 SELECT * FROM t_user WHERE id = #{id} 10 </select> 11 12 </mapper>復(fù)制代碼

  3、然后我們配置applicationContext配置文件,這里介紹兩種配置,一種是單個(gè)Mapper的配置,一種的進(jìn)行包掃描的配置

  ①單個(gè)Mapper的配置

    a)其中需要配置的就是MapperInterface接口和SqlSessionFactory兩個(gè)屬性,MapperInterface作用就是掃描指定的Mapper接口文件

<!--配置mapper通過(guò)MapperFactoryBean來(lái)進(jìn)行配置,該類能夠根據(jù)mapper接口生成代理對(duì)象--><bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"><!--配置mapper接口--><property name="mapperInterface" value="cn.test.ssm.mapper.UserMapper"></property><!--配置SqlSessionFactory--><property name="sqlSessionFactory" ref="sqlSessionFactory"></property></bean>復(fù)制代碼

    b)使用測(cè)試程序進(jìn)行測(cè)試

1 package test;2 3 import cn.test.ssm.dao.UserDao;4 import cn.test.ssm.mapper.UserMapper;5 import cn.test.ssm.po.User;6 import org.junit.Before;7 import org.junit.Test;8 import org.springframework.context.ApplicationContext;9 import org.springframework.context.support.ClassPathXmlApplicationContext; 10 11 import static org.junit.Assert.*; 12 13 public class UserMapperTest { 14 private ApplicationContext applicationContext; 15 16 @Before 17 public void setUp() throws Exception { 18 //得到spring的容器 19 applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml"); 20 } 21 22 @Test 23 public void findUserById() throws Exception{ 24 UserMapper userMapper = (UserMapper) applicationContext.getBean("userMapper"); 25 26 User user = userMapper.findUserById(1); 27 28 System.out.println(user); 29 } 30 }復(fù)制代碼

  c)通過(guò)觀察日志分析結(jié)果如下:

  ②通過(guò)掃描mapper包的方式進(jìn)行配置

    a)其中basePackage就是設(shè)置掃描的包,當(dāng)有多個(gè)包需要掃描的時(shí)候,使用逗號(hào)隔開(kāi)

1 <!--通過(guò)配置掃描器的方式解決上面配置存在的不足:當(dāng)我們的Mapper接口比較多的時(shí)候,上面單個(gè)配置Mapper顯然會(huì)比較繁瑣, 2 所以我們可以使用掃描器的方式進(jìn)行配置,將mapper包下面的所有接口同時(shí)進(jìn)行掃描配置,顯然,mapper接口的文件名和Mapper 3 配置文件的文件名應(yīng)該相同 4 --> 5 <!--通過(guò)下面的這種配置:可以自動(dòng)創(chuàng)建對(duì)象并且向spring容器中注入--> 6 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> 7 <property name="basePackage" value="cn.test.ssm.mapper"></property> 8 <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property> 9 </bean>復(fù)制代碼

    b)測(cè)試程序和上面的測(cè)試程序相同,我們來(lái)運(yùn)行測(cè)試程序,但是發(fā)現(xiàn)運(yùn)行出了下面的異常

    c)通過(guò)查詢資料,發(fā)現(xiàn)是由于Spring版本和Jdk版本不支持的原因,因?yàn)楸敬螠y(cè)試使用的Spring版本是3.2.x,然后該版本不支持jdk1.8,所以就需要修改jdk版本為1.7,如下圖所示

  

  然后再次運(yùn)行項(xiàng)目即可

  


轉(zhuǎn)載于:https://juejin.im/post/5cdfed6ef265da1b6720dcaf

總結(jié)

以上是生活随笔為你收集整理的Mybatis和Spring整合的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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