09. Spring集成Mybatis框架

09. Spring集成Mybatis框架

1、创建Maven项目

image-20200625175136577

image-20200625175220447

2、导入一下必要的jar包

在pom.xml文件中

<project xmlns="http://maven.apache.org/POM/4.0.0"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
   					https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.company</groupId>
  <artifactId>SpringDemo05</artifactId>
  <version>1.0.0</version>
  <packaging>war</packaging>
  
    <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
     <!-- spring-context -->
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-context</artifactId>
	    <version>5.2.2.RELEASE</version>
	</dependency>
	<!-- spring-jdbc -->
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-jdbc</artifactId>
		<version>5.2.2.RELEASE</version>
	</dependency>
	<!-- 阿里数据源 -->
	<dependency>
		<groupId>com.alibaba</groupId>
		<artifactId>druid</artifactId>
		<version>1.1.10</version>
	</dependency>
	
   <!-- mysql-connector-java -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.20</version>
    </dependency>
	
	<!-- Spring 切面实现AOP -->
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-aspects</artifactId>
	    <version>5.2.2.RELEASE</version>
	</dependency>
	
	<!-- spring整合mybatis的插件包 -->
	 <dependency>
	    <groupId>org.mybatis</groupId>
	    <artifactId>mybatis-spring</artifactId>
	    <version>1.3.1</version>
	</dependency>
	
	   <!-- mybatis -->
	<dependency>
	    <groupId>org.mybatis</groupId>
	    <artifactId>mybatis</artifactId>
	    <version>3.4.2</version>
	</dependency>
      
     <!-- log4j -->
      <dependency>
         <groupId>log4j</groupId>
         <artifactId>log4j</artifactId>
         <version>1.2.17</version>
      </dependency>  
	
  </dependencies>
</project>

3、搭建Spring

3.1 数据库连接配置文件

(1)jdbc.properties

url=jdbc:mysql://127.0.0.1:3306/shop?characterEncoding=utf-8&serverTimezone=GMT
driver=com.mysql.cj.jdbc.Driver
jdbc_username=root
jdbc_password=123456
initialSize=10
minIdle=5
maxActive=20

(2)db.xml

<?xml version="1.0" encoding="UTF-8"?> 
<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"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans 
                    http://www.springframework.org/schema/beans/spring-beans.xsd
                    http://www.springframework.org/schema/context
                    http://www.springframework.org/schema/context/spring-context.xsd
                    http://www.springframework.org/schema/aop
                    http://www.springframework.org/schema/aop/spring-aop.xsd
                    http://www.springframework.org/schema/tx
                    http://www.springframework.org/schema/tx/spring-tx.xsd">
        
        
        <!-- 加载属性文件 -->
        <context:property-placeholder location="jdbc.properties"/>
        
        <!-- spring管理阿里数据源对象的创建,由此数据源对象管理创建数据库连接对象(Connection) -->
        <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
           <property name="driverClassName" value="${driver}"></property>
           <property name="url" value="${url}"></property>
           <property name="username" value="${jdbc_username}"></property>
           <property name="password" value="${jdbc_password}"></property>
           <property name="initialSize" value="${initialSize}"></property>
		   <property name="minIdle" value="${minIdle}"></property>
		   <property name="maxActive" value="${maxActive}"></property>
        </bean>
        
        
        <!-- 配置事务管理器类 -->
        <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
              <property name="dataSource" ref="dataSource"></property>
        </bean>
        
         <!-- 开启事务注解功能 -->
         <tx:annotation-driven transaction-manager="transactionManager" />
         
</beans>

(3)application.xml

<?xml version="1.0" encoding="UTF-8"?> 
<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.xsd
                    http://www.springframework.org/schema/context
                    http://www.springframework.org/schema/context/spring-context.xsd
                    http://www.springframework.org/schema/aop
                    http://www.springframework.org/schema/aop/spring-aop.xsd">	
 	 	  
 	  <!-- 导入数据库连接配置 -->
	  <import resource="db.xml"/>
	  
	  <!-- 开启自动扫描注解 -->
 	  <context:component-scan base-package="com.company.springPro"></context:component-scan>
 	  
</beans>

4、Dao、Po、mapper以及service类的编写

(1)UserPo.java

package com.company.project.Po;

import java.sql.Date;

@Component
public class UserPo {
	private int id;
	private String userName;
	private String password;
	private Date regTime;

	public UserPo() {
		// TODO Auto-generated constructor stub
	}

	public UserPo(String userName, String password, Date regTime) {
		super();

		this.userName = userName;
		this.password = password;
		this.regTime = regTime;
	}

	public int getId() {
		return id;
	}

	public String getUserName() {
		return userName;
	}

	public String getPassword() {
		return password;
	}

	public void setId(int id) {
		this.id = id;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public Date getRegTime() {
		return regTime;
	}

	public void setRegTime(Date regTime) {
		this.regTime = regTime;
	}

	@Override
	public String toString() {
		return "UserPo [id=" + id + ", userName=" + userName + ", password=" + password + ", regTime=" + regTime + "]";
	}
}

(2)UserDao.java

package com.company.springPro.dao;

import java.util.List;

import org.springframework.stereotype.Repository;

import com.company.springPro.Po.UserPo;

@Repository
public interface UserDao {
	void insert(UserPo userPo);
	void update(UserPo userPo);
	void delete(int id);
	UserPo findById(int id);
	List<UserPo> findAll();
}

(3)UserService.java

package com.company.springPro.service;

import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.company.springPro.Po.UserPo;
import com.company.springPro.dao.UserDao;

@Service
public class UserService {
	@Autowired
	private UserDao userDao;
	
	public UserService() {
		
	}
	
	public void insert(UserPo userPo) {
		userDao.insert(userPo);
	}
	
	public void update(UserPo userPo) {
		userDao.update(userPo);
	}
	
	public void delete(int userId) {
		userDao.delete(userId);
	}
	
	public UserPo findById(int id) {
		return userDao.findById(id);
	}
	
	public List<UserPo> findAll(){
		return userDao.findAll();
	}	
}

(4)UserMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    
<!--	
	namespace 指向对应接口的类路径
		
 -->    

<mapper namespace="com.company.springPro.dao.UserDao">
	<!-- 把重复的sql代码可以提炼出来,通过定义别名把sql列名和java属性对应 -->
	<sql id="selectResult">
		id,user_name userName,password,reg_time regTime
	</sql>
	
	
	<!-- 高级 -->
	 <resultMap type="UserPo" id="userResult">
	 	<id property="id" column="id"/>
	 	<result property="userName"  column="user_name"/>
	 	<result property="password"  column="password"/>
	 	<result property="regTime"  column="reg_time"/>
	 </resultMap>

	<!-- 
		id="saveUser":唯一标记
		parameterType="UserPo":参数类型
		useGeneratedKeys="true":针对于主键自增
		 -->
	<insert id="insert" parameterType="UserPo" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
		insert into t_user(id,user_name,password,reg_time) 
		values
		(#{id},#{userName},#{password},#{regTime})
	</insert>
	
	<update id="update" parameterType="UserPo" >
		update t_user 
			set user_name=#{userName},password=#{password},reg_time=#{regTime}
			where id = #{id}
	</update>
	
	<delete id="delete" parameterType="int">
		delete from t_user
			where id = #{id}
	</delete>
	
	<select id="findById" parameterType="int" resultMap="userResult">
		
		select id,user_name,password,reg_time from t_user where id = #{id}
	</select>
	
	<!-- mybatis会自动把得到的数据进行封装,把每条数据封装成对象 ,最后封装成集合-->
	<select id="findAll" resultType="UserPo">

		 select id,user_name,password,reg_time from t_user;
	</select>
</mapper>

5、搭建MyBatis

(1)mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
 PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

	
	<!-- 设置类型自动转换 -->
	<settings>
		<setting name="mapUnderscoreToCamelCase" value="true"/>
	</settings>
	  
	<typeAliases>
	<!-- 利用package标签可以直接把整个包的 Po类都导入,这块是导入与数据库表对应的java类-->
	<package name="com.company.springPro.Po"/>
	</typeAliases>

	<!-- 将我们写好的sql映射文件一定要注册到全局配置文件中 -->
	<mappers>
		<!-- 利用package标签可以直接把整个包的 xml配置文件都导入,这块是导入数据库表与java Po类对应的配置文件 -->
		<package name="com.company.springPro.mapper" />
	</mappers>
	
</configuration>

(2)配置sqlSessionFactory

在db.xml文件中添加

         <!-- 配置sqlSessionFactory spring管理生成SqlSessionFactory对象-->
		 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		    <!--注入数据库连接管理对象 -->
		   <property name="dataSource" ref="dataSource"></property>
		    <!-- 加载mybatis全局配置文件 -->
		   <property name="configLocation" value="mybatis-config.xml"></property>
		    <!-- 加载sql映射文件 -->
		   <property name="mapperLocations" value="com/company/springPro/mapper/*Mapper.xml"></property>
		 </bean>
		 
		 <!-- 指定生成接口代理 -->
		 <bean id="mapperFactory" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		   <property name="basePackage" value="com.company.springPro.dao"></property>
		    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
		 </bean>

6、测试

package com.company.springPro.test;

import java.sql.Date;
import java.util.List;

import org.apache.log4j.Logger;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.company.springPro.Po.UserPo;
import com.company.springPro.service.UserService;

import junit.framework.TestCase;

public class UserTest extends TestCase{
	Logger logger = Logger.getLogger(UserTest.class);
	ApplicationContext context = new ClassPathXmlApplicationContext("application.xml");
	UserService userService = (UserService) context.getBean("userService");
	public void testInsert() {
		//测试期间启动加载spring的写法                         加载spring配置文件,创建一个ApplicationContext
		
		
		UserPo userPo = new UserPo("王五","123456",new Date(System.currentTimeMillis()));
		userService.insert(userPo);
		
	}
	
	public void testUpdate() {

		UserPo userPo = new UserPo("张三","123",new Date(System.currentTimeMillis()));
		userPo.setId(7);
		userService.update(userPo);

	}
	
	public void testDelete() {

		userService.delete(7);
	}
	
	public void testFindById() {
		UserPo userPo = userService.findById(1);
		logger.debug(userPo.toString());
	}
	

	public void testFindAll() {

		List<UserPo> userList = userService.findAll();
		for(int i = 0;i<userList.size();i++) {
			logger.debug(userList.get(i).toString());
		}	
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值