mybatis是一个轻量级的ORM映射框架。今天来学习spring整合mybatis。
1.导入依赖包。
<!-- 添加mybatis依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.8</version>
</dependency>
<!-- 整合mybatis时需要添加如下两个jar文件-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>4.3.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.3.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.9.RELEASE</version>
</dependency>
<!-- 添加mysql驱动 (不要选5.1.6) -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.40</version>
</dependency>
<!--添加alibaba的druid连接池依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.23</version>
</dependency>
<!-- 添加junit用于实现单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
2.MyBatis配置文件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>
<!-- mybatis控制台LOG输出 -->
<setting name="logImpl" value="LOG4J2" />
</settings>
<!--
<typeAliases>
<typeAlias type="cn.tedu.ttms.product.entity.Team" alias="team"/>
<typeAlias type="cn.tedu.ttms.product.entity.Project" alias="project"/>
</typeAliases>
-->
<!--
为mapper文件中的参数类型,
返回值类型定义别名
假如是采用package元素定义,
那默认类型的别名为类名并且
第一个单词的首字母小写.
-->
<typeAliases>
<package name="cn.tedu.ttms.product.entity"/>
</typeAliases>
</configuration>
3.配置 mybatis的xml。主要配置连接池等。
<?xml version="1.0" encoding="UTF-8"?>
<beans default-lazy-init="true"
xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.3.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-4.3.xsd
http://www.springframework.org/schema/data/jpa
http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<util:properties id="config" location="classpath:config.properties"/>
<!-- 配置 Druid 连接池 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
destroy-method="close" init-method="init" lazy-init="true">
<property name="driverClassName" value="#{config.driver}" />
<property name="url" value="#{config.url}" />
<property name="username" value="#{config.username}" />
<property name="password" value="#{config.password}" />
<!-- 初始化连接大小 -->
<property name="initialSize" value="#{config.initialSize}" />
<!-- 连接池最大数量 -->
<property name="maxActive" value="#{config.maxActive}" />
<!-- 连接池最小空闲 -->
<property name="minIdle" value="#{config.minIdle}" />
<!-- 获取连接最大等待时间 -->
<property name="maxWait" value="#{config.maxWait}" />
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="configLocation" value="classpath:mybatis-config.xml"></property>
<!-- 自动扫描mapping.xml文件 -->
<property name="mapperLocations" >
<list>
<value>classpath:mapper/*.xml</value>
</list>
</property>
</bean>
<!-- Mapper接口所在包,Spring会自动查找其下的Mapper -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.gcloud.dao"/>
</bean>
<!-- 配置spring的事务管理 -->
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!--设置注解驱动的事务管理 -->
<tx:annotation-driven
transaction-manager="txManager"/>
</beans>
4.写接口和对应的映射文件。例如下图。
package com.gcloud.dao;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import com.gcloud.common.dao.BaseDao;
import com.gcloud.entity.SysUser;
public interface SysUserDao extends BaseDao<SysUser> {
public List<SysUser> findObjects(@Param("username")String username);
public int deleteUser(Integer id);
SysUser findObjectByUserName(@Param("username")String username);
List<String> findUserPermissions(Integer userId);
}
<?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">
<mapper namespace="com.gcloud.dao.SysUserDao">
<!-- 保存用户信息 -->
<insert id="insertObject" parameterType="com.gcloud.entity.SysUser" useGeneratedKeys="true" keyProperty="id">
INSERT INTO
sys_users (username,password,createdUser,createdTime,modifiedUser,modifiedTime)
VALUES
(#{username},#{password},#{createdUser},NOW(),#{modifiedUser},NOW())
</insert>
<!-- 修改用户信息 -->
<update id="updateObject" parameterType="com.gcloud.entity.SysUser" >
UPDATE
sys_users
SET
username=#{username},
password=#{password},
modifiedUser=#{modifiedUser},
modifiedTime=NOW()
WHERE
id=#{id}
</update>
<!-- 查询全部用户-->
<select id="findObjects" resultType="com.gcloud.entity.SysUser">
SELECT
id,username,password
FROM
sys_users
<where>
<if test="username!=null and username!=''">
username LIKE CONCAT('%',#{username},'%')
</if>
</where>
</select>
<!-- 删除用户 -->
<delete id="deleteUser" parameterType="integer">
DELETE FROM sys_users WHERE id=#{id}
</delete>
<!-- 查询用户权限 -->
<select id="findUserPermissions" parameterType="integer" resultType="string">
SELECT
r.permission
FROM
sys_user_roles ur,sys_role_resources rr ,sys_resources r
WHERE
ur.role_id=rr.role_id
AND
rr.resource_id = r.id
AND
ur.user_id = #{id}
</select>
<!-- 查询登陆用户可见的所有菜单 -->
<!-- <select id="findUserMenus" parameterType="java.lang.Integer" resultType="map">
SELECT
r.name
FROM
sys_user_roles ur
JOIN
sys_role_resources rr
JOIN
sys_resources r
ON
ur.role_id = rr.role_id
AND
rr.resource_id = r.id
AND
ur.user_id = #{id}
WHERE
r.type=1
</select> -->
<select id="findObjectByUserName" resultType="com.gcloud.entity.SysUser">
SELECT *
FROM
sys_users
WHERE
username=#{username}
</select>
</mapper>