2022.5.31 整合mybatis
12、整合mybatis
导包
1 <dependencies> 2 <dependency> 3 <groupId>junit</groupId> 4 <artifactId>junit</artifactId> 5 <version>4.12</version> 6 </dependency> 7 8 <dependency> 9 <groupId>mysql</groupId> 10 <artifactId>mysql-connector-java</artifactId> 11 <version>8.0.29</version> 12 </dependency> 13 <dependency> 14 <groupId>org.mybatis</groupId> 15 <artifactId>mybatis</artifactId> 16 <version>3.5.9</version> 17 </dependency> 18 <dependency> 19 <groupId>org.springframework</groupId> 20 <artifactId>spring-webmvc</artifactId> 21 <version>5.3.20</version> 22 </dependency> 23 <!--spring操作数据库,还需要一个spring-jdbc--> 24 <dependency> 25 <groupId>org.springframework</groupId> 26 <artifactId>spring-jdbc</artifactId> 27 <version>5.3.20</version> 28 </dependency> 29 <dependency> 30 <groupId>org.aspectj</groupId> 31 <artifactId>aspectjweaver</artifactId> 32 <version>1.9.2</version> 33 </dependency> 34 <dependency> 35 <groupId>org.mybatis</groupId> 36 <artifactId>mybatis-spring</artifactId> 37 <version>2.0.7</version> 38 </dependency> 39 </dependencies>
12.1、回忆mybatis
1.编写实体类
2.编写核心配置文件
3.编写接口
4.编写Mapper.xml
5.测试
12.2、Mybatis-spring
法一:
User
1 package com.xing.pojo; 2 3 public class User { 4 private int id; 5 private String name; 6 private String pwd; 7 8 public User() { 9 } 10 11 public User(int id, String name, String pwd) { 12 this.id = id; 13 this.name = name; 14 this.pwd = pwd; 15 } 16 17 public int getId() { 18 return id; 19 } 20 21 public void setId(int id) { 22 this.id = id; 23 } 24 25 public String getName() { 26 return name; 27 } 28 29 public void setName(String name) { 30 this.name = name; 31 } 32 33 public String getPwd() { 34 return pwd; 35 } 36 37 public void setPwd(String pwd) { 38 this.pwd = pwd; 39 } 40 41 @Override 42 public String toString() { 43 return "User{" + 44 "id=" + id + 45 ", name='" + name + '\'' + 46 ", pwd='" + pwd + '\'' + 47 '}'; 48 } 49 }
UserMapper
1 package com.xing.mapper; 2 3 import com.xing.pojo.User; 4 5 import java.util.List; 6 7 public interface UserMapper { 8 List<User> selectUser(); 9 }
UserMapper.xml
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 5 6 <mapper namespace="com.xing.mapper.UserMapper"> 7 8 <select id="selectUser" resultType="user"> 9 select * from mybatis.user; 10 </select> 11 </mapper>
mybatis-config.xml
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE configuration 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 5 <!--configuration核心配置文件--> 6 <configuration> 7 8 <!--体类起别名:它的默认别名就为这个类的类名,首字母小写!--> 9 <typeAliases> 10 <package name="com.xing.pojo"/> 11 </typeAliases> 12 13 <!-- <mappers>--> 14 <!-- <mapper class="com.xing.mapper.UserMapper"/>--> 15 <!-- </mappers>--> 16 </configuration>
spring-dao.xml
数据库配置文件
1.编写数据源配置
2.sqlSessionFactory
3.sqlSessionTemplate
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 xsi:schemaLocation="http://www.springframework.org/schema/beans 5 https://www.springframework.org/schema/beans/spring-beans.xsd"> 6 7 <!--DataSource:使用Spring的数据源替换Mybatis的配置 8 我们这里使用Spring提供的JDBC:org.springframework.jdbc.datasource 9 --> 10 <bean id="datasource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 11 <property name="driverClassName" value="com.mysql.jdbc.Driver"/> 12 <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8"/> 13 <property name="username" value="root"/> 14 <property name="password" value="123456"/> 15 </bean> 16 17 <!--sqLSessionFactory--> 18 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 19 注入上面的数据源 20 <property name="dataSource" ref="datasource"/> 21 22 <!--绑定mybatis配置文件 可以不用写mybatis配置文件,因为可以在这里配置,例如下面配置的mapper--> 23 <property name="configLocation" value="classpath:mybatis-config.xml"/> 24 25 26 <!--等价于mybatis配置文件中的 27 <mappers> 28 <mapper class="com.xing.mapper.UserMapper"/> 29 </mappers> 30 --> 31 <property name="mapperLocations" value="classpath:com/xing/mapper/*.xml"/> 32 </bean> 33 34 <!--sqLsessionTemplate:就是我们使用的sqLsession--> 35 <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"> 36 <!--只能使用构造器注入sqlSessionFactory,因为没有set方法 --> 37 <constructor-arg index="0" ref="sqlSessionFactory"/> 38 </bean> 39 40 </beans>
UserMapperImpl
4.需要给接口加实现类
1 package com.xing.mapper; 2 3 import com.xing.pojo.User; 4 import org.mybatis.spring.SqlSessionTemplate; 5 6 import java.util.List; 7 8 public class UserMapperImpl implements UserMapper{ 9 10 //我们的所有操作,在原来都使用sqLSession来执行,现在都是用SqLSessionTemplate 11 private SqlSessionTemplate sqlSession; 12 13 //spring万物都要注入,所以要set方法 14 public void setSqlSession(SqlSessionTemplate sqlSession) { 15 this.sqlSession = sqlSession; 16 } 17 18 19 @Override 20 public List<User> selectUser() { 21 UserMapper mapper = sqlSession.getMapper(UserMapper.class); 22 return mapper.selectUser(); 23 } 24 }
applicationContext.xml
5.将自己写的实现类,注入到Spring中
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 xsi:schemaLocation="http://www.springframework.org/schema/beans 5 https://www.springframework.org/schema/beans/spring-beans.xsd"> 6 7 <import resource="spring-dao.xml"/> 8 9 <!-- 将实现类注入到spring--> 10 <bean id="userMapper" class="com.xing.mapper.UserMapperImpl"> 11 <!-- 调用上面(在spring-dao.xml中)的bean--> 12 <property name="sqlSession" ref="sqlSession"/> 13 </bean> 14 15 </beans>
MyTest
6.测试使用
1 import com.xing.mapper.UserMapper; 2 import com.xing.pojo.User; 3 import org.junit.Test; 4 import org.springframework.context.ApplicationContext; 5 import org.springframework.context.annotation.AnnotationConfigApplicationContext; 6 import org.springframework.context.support.ClassPathXmlApplicationContext; 7 8 import java.util.List; 9 10 public class MyTest { 11 @Test 12 public void test() { 13 ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); 14 UserMapper mapper = context.getBean("userMapper", UserMapper.class); 15 List<User> userList = mapper.selectUser(); 16 for (User user : userList) { 17 System.out.println(user); 18 } 19 } 20 21 22 }
法二:
UserMapperImpl2
1 package com.xing.mapper; 2 3 import com.xing.pojo.User; 4 import org.apache.ibatis.session.SqlSession; 5 import org.mybatis.spring.support.SqlSessionDaoSupport; 6 7 import java.util.List; 8 //简化了方法一实现类的操作 9 10 //继承一个类SqlSessionDaoSupport 11 //SqlSessionDaoSupport是一个抽象的支持类,用来为你提供 SqlSession。调用getsqlsession()方法你会得到一个SqlSessionTemplate,之后可以用于执行SQL方法 12 public class UserMapperImpl2 extends SqlSessionDaoSupport implements UserMapper{ 13 @Override 14 public List<User> selectUser() { 15 SqlSession sqlSession = getSqlSession(); 16 UserMapper mapper = sqlSession.getMapper(UserMapper.class); 17 return mapper.selectUser(); 18 } 19 }
spring-dao.xml
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 xsi:schemaLocation="http://www.springframework.org/schema/beans 5 https://www.springframework.org/schema/beans/spring-beans.xsd"> 6 7 <bean id="datasource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 8 <property name="driverClassName" value="com.mysql.jdbc.Driver"/> 9 <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8"/> 10 <property name="username" value="root"/> 11 <property name="password" value="123456"/> 12 </bean> 13 14 <!--sqLSessionFactory--> 15 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 16 <property name="dataSource" ref="datasource"/> 17 18 <property name="configLocation" value="classpath:mybatis-config.xml"/> 19 <property name="mapperLocations" value="classpath:com/xing/mapper/*.xml"/> 20 </bean> 21 22 23 </beans>
applicationContext.xml
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 xsi:schemaLocation="http://www.springframework.org/schema/beans 5 https://www.springframework.org/schema/beans/spring-beans.xsd"> 6 7 <import resource="spring-dao.xml"/> 8 9 <!-- 将实现类注入到spring --> 10 <bean id="userMapper2" class="com.xing.mapper.UserMapperImpl2"> 11 <!--相当于简化了spring-dao sqLsessionTemplate的bean配置 --> 12 <property name="sqlSessionFactory" ref="sqlSessionFactory"/> 13 </bean> 14 15 </beans>
test
1 import com.xing.mapper.UserMapper; 2 import com.xing.pojo.User; 3 import org.junit.Test; 4 import org.springframework.context.ApplicationContext; 5 import org.springframework.context.annotation.AnnotationConfigApplicationContext; 6 import org.springframework.context.support.ClassPathXmlApplicationContext; 7 8 import java.util.List; 9 10 public class MyTest { 11 @Test 12 public void test() { 13 ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); 14 UserMapper mapper = context.getBean("userMapper2", UserMapper.class); 15 List<User> userList = mapper.selectUser(); 16 for (User user : userList) { 17 System.out.println(user); 18 } 19 } 20 }
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术