一、代理开发规则
① mapper.xml文件中namespace与mapper接口的全限定名相同。
② mapper接口方法名和mapper.xml中定义的每个statement的id相同。
③ mapper接口方法的传入参数类型和mapper.xml中定义的每个sql的parameterType的类型相同,并且返回参数类型的resultType的类型相同。
如图:
二、Mybatis映射文件配置
- select:查询
<select id="findAll" resultType="com.itcast.domain.user"> select * from user </select>
- insert:插入
<insert id="save" parameterType="com.itcast.domain.user" > insert into user values (#{Id},#{userName},#{passWord}) </insert>
- update:修改
<update id="edit" parameterType="com.itcast.domain.user"> update user set username=#{userName},password=#{passWord} where id=#{Id} </update>
- delete:删除
<delete id="remove" parameterType="int"> delete from user where id=#{id} </delete>
- where:where条件
<mapper namespace="com.itcast.dao.UserMapper"> <sql id="query"> select * from userInfo </sql> <select id="queryByWhere" resultType="com.itcast.domain.user" parameterType="com.itcast.domain.user"> <include refid="query"></include> <where> <if test="id!=0"> and id=#{id} </if> <if test="userName!=null"> and username=#{userName} </if> <if test="passWord!=null"> and password=#{passWord} </if> </where> </select> </mapper>
- if:判断,同上
- foreach:循环
<?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.itcast.dao.UserMapper"> <sql id="query"> select * from user </sql> <select id="queryByIds" parameterType="list" resultType="com.itcast.domain.user"> <include refid="query"></include> <where> <foreach collection="list" open=" id in(" close=")" separator="," item="id"> #{id} </foreach> </where> </select> </mapper>
- sql:sql片段抽取 通常与 include 标签一起进行使用
三、自定义类型转换处理器(typeHandlers)
- 定义类型转换处理器类继承 org.apache.ibatis.type.BaseTypeHandler 下的 BaseTypeHandler<T>类
- 实现BaseTypeHandler<T>类中的四个抽象方法,其中 setNonNullParameter 为java程序设置数据到数据库的回调方法,getNullableResult为查询数据库的字符串类型转换成java的Type类型的方法。
- Mybatis核心配置文件中注册
public class DateTypeHandler extends BaseTypeHandler<Date> {
@Override
public void setNonNullParameter(PreparedStatement preparedStatement, int i, Date date, JdbcType jdbcType) throws SQLException {
long time = date.getTime();
preparedStatement.setLong(i, time);
}
@Override
public Date getNullableResult(ResultSet resultSet, String s) throws SQLException {
long aLong = resultSet.getLong(s);
Date date = new Date(aLong);
return date;
}
@Override
public Date getNullableResult(ResultSet resultSet, int i) throws SQLException {
long aLong = resultSet.getLong(i);
Date date = new Date(aLong);
return date;
}
@Override
public Date getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
long aLong = callableStatement.getLong(i);
Date date = new Date(aLong);
return date;
}
}
<typeHandlers>
<typeHandler handler="com.itcast.handler.DateTypeHandler"></typeHandler>
</typeHandlers>
四、分页插件pageHelper
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.2.0</version>
</dependency>
<dependency>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
<version>3.2</version>
</dependency>
sqlMapConfig.xml中注册:
<plugins>
<!-- 配置分页助手 4.0.0版本后不实现PageHelper,自动匹配数据库 -->
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<!-- 指定方言 -->
<!-- <property name="dialect" value="mysql"/>-->
</plugin>
</plugins>
五、sqlMapConfig.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>
<properties resource="jdbc.properties"></properties>
<typeAliases>
<typeAlias type="com.itcast.domain.UserInfo" alias="user"></typeAlias>
</typeAliases>
<typeHandlers>
<typeHandler handler="com.itcast.handler.DateTypeHandler"></typeHandler>
</typeHandlers>
<plugins>
<!-- 配置分页助手 4.0.0版本后不实现PageHelper,自动匹配数据库 -->
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<!-- 指定方言 -->
<!-- <property name="dialect" value="mysql"/>-->
</plugin>
</plugins>
<environments default="developement">
<environment id="developement">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/itcast/mapper/UserInfoMapper.xml"></mapper>
</mappers>
</configuration>