1.Mybatis原生Dao开发
前提加载mybatisConfig.xml配置文件(里面配置了mapper(映射文件)配置)创建SqlSessionFactory对象
1.在Dao层方法内部通过sqlSession对象执行相关操作,
2.相关操作内部会读取Mapper.xml(映射文件),
3.通过Executor(baseExecutor,CachingExecutor)执行相关的数据库操作
4.创建MapperedStatement对象,根据一些唯一的key创建Cache对象
5.按照映射规则返回相关结果
案例: mapper.xml映射配置文件
<mapper namespace="celebrityStatement">
<!--mysql自增主键 -->
<insert id="insertCelebrity" parameterType="com.ncs.entity.Celebrity">
<!--如果使用自增长的主键,且需要返回自增长的主键属性值给到原来保存成功的对象上 -->
<selectKey keyProperty="c_id" order="AFTER" resultType="java.lang.Integer">
select LAST_INSERT_ID()
</selectKey>
insert into celebrity(c_id,c_name) values(#{c_id},#{c_name})
</insert>
</mapper>
CelebrityDaoImpl.java
@Override
public int saveCelebrity(Celebrity celebrity) {
// 加载Mybatis配置文件资源,创建会话工厂
SqlSessionFactory factory = null;
try {
factory = new SqlSessionFactoryBuilder()
.build(Resources.getResourceAsStream("resources/mybatis/mybatisConfig.xml"));
} catch (IOException e) {
e.printStackTrace();
}
// 获取会话对象
SqlSession session = factory.openSession();
int insert = session.insert("celebrityStatement.insertCelebrity", celebrity);
return insert;
}
2.Mapper代理开发
加载mybatisConfig.xml配置文件,创建SqlSessionFactory
1.按照Mapper.xml映射配置文件的相关规则,书写Mapper.java接口(注意:Mapper接口,必须按照Mapper.xml映射相关规则,否则程序不成功)
注意修改mapper.xml中namespace值为mapper接口地址
2.通过SqlSession对象,依靠反射生成Mapper接口的代理对象
3.通过代理对象执行相关操作
4.通过Executor(baseExecutor,CachingExecutor)执行相关的数据库操作
5.创建MapperedStatement对象,根据一些唯一的key创建Cache对象
6.按照映射规则返回相关结果
案例: mapper.xml配置文件
<mapper namespace="com.ncs.mapper.CelebrityMapper">
<!--注意修改mapper.xml中namespace值为mapper接口地址-->
<select id="getByName" parameterType="string" statementType="STATEMENT" resultType="com.ncs.entity.Celebrity">
select * from celebrity where c_name like '%${value}%'
</select>
</mapper>
Mapper.java接口
//注意:Mapper接口,必须按照Mapper.xml映射相关规则,否则程序不成功
public interface CelebrityMapper {
Celebrity getById(int id);
Celebrity getByName(String name);
int insertCelebrity(Celebrity celebrity);
int deleteCelebrityById(int id);
int updateCelebrity(Celebrity celebrity);
}
Mybatis配置文件配置Mapper映射文件
<!--加载ORM映射文件 -->
<mappers>
<mapper resource="resources/mapper/CelebrityMapper.xml"></mapper>
<!--由于mybatis自身无mapper批量扫描,必须借助spring的MapperScannerConfigurer(来源mybatis和spring的整合) -->
<!--这种扫描似乎无法批量扫描resource路径下的资源,因为这是一个package标签-->
<!-- <package name="com.ncs.mapper" /> -->
</mappers>
代理实现操作:
@Override
public Celebrity getByName(String Name) {
// 加载Mybatis配置文件资源,创建会话工厂
SqlSessionFactory factory = null;
try {
factory = new SqlSessionFactoryBuilder()
.build(Resources.getResourceAsStream("resources/mybatis/mybatisConfig.xml"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 获取会话对象
SqlSession session = factory.openSession();
//通过反射获取代理对象
CelebrityMapper mapper = session.getMapper(CelebrityMapper.class);
Celebrity result = mapper.getByName(Name);
return result;
}
3.spring整合Mybatis使用Mapper代理开发
1.加载Mybatisconfig.配置文件,创建SqlSessionFactory,并且将SqlSessionFactory交给Spring管理
2.扫描所有的mapper接口,通过SqlSessionFactory生成的sqlSession为mapper接口创建代理对象,并且将代理对象也全部交给spring管理
<!--Spring整合Mybatis,在这里配置SqlSessionFactoryBean -->
<bean id="sqlSessionFactory"
class="org.mybatis.spring.SqlSessionFactoryBean">
<!--加载Mybatis配置文件,将sqlSessionFactory交给springIOC容器管理 -->
<property name="configLocation"
value="classpath:resources/mybatis/mybatisConfig.xml"></property>
<property name="dataSource" ref="dataSource" />
</bean>
<!--org.mybatis.spring.mapper.MapperFactoryBean复杂配置的解决方案 开启mapper接口快速扫描,简化配置 -->
<!-- 自动扫描 将Mapper接口生成代理注入到Spring -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!--指定mapper接口路径,一次性扫描所有的mapper接口 -->
<property name="basePackage" value="com.ncs.mapper"></property>
<property name="sqlSessionFactoryBeanName"
value="sqlSessionFactory"></property>
</bean>
其他步骤和和为与spring整合的mapper代理开发方式一样
3.创建mapper接口
4.在mybatisConfig.xml配置文件中扫描mapper映射文件
<!--加载ORM映射文件 -->
<mappers>
<mapper resource="resources/mapper/UserMapper.xml"></mapper>
<mapper resource="resources/mapper/OrderformMapper.xml"></mapper>
<mapper resource="resources/mapper/OrderdetailsMapper.xml"></mapper>
<mapper resource="resources/mapper/CommodityMapper.xml"></mapper>
<!--映射文件批量扫描,mapper映射文件 -->
<!-- <package name="com.ncs.mapper" /> -->
</mappers>
5.书写mapper.xml
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ncs.mapper.UserMapper">
<!--指定Mapper开启二级缓存 -->
<!-- <cache></cache> -->
<resultMap id="BaseResultMap" type="com.ncs.pojo.User">
<!-- WARNING - @mbg.generated This element is automatically generated by
MyBatis Generator, do not modify. -->
<result column="id" jdbcType="INTEGER" property="id" />
<result column="u_name" jdbcType="VARCHAR" property="uName" />
<result column="u_sex" jdbcType="CHAR" property="uSex" />
<result column="u_age" jdbcType="INTEGER" property="uAge" />
<result column="birthday" jdbcType="TIMESTAMP"
property="birthday" />
<result column="address" jdbcType="VARCHAR" property="address" />
<result column="remark" jdbcType="VARCHAR" property="remark" />
</resultMap>
<sql id="Example_Where_Clause">
<!-- WARNING - @mbg.generated This element is automatically generated by
MyBatis Generator, do not modify. -->
<where>
<foreach collection="oredCriteria" item="criteria"
separator="or">
<if test="criteria.valid">
<trim prefix="(" prefixOverrides="and" suffix=")">
<foreach collection="criteria.criteria" item="criterion">
<choose>
<when test="criterion.noValue">
and ${criterion.condition}
</when>
<when test="criterion.singleValue">
and ${criterion.condition} #{criterion.value}
</when>
<when test="criterion.betweenValue">
and ${criterion.condition} #{criterion.value}
and
#{criterion.secondValue}
</when>
<when test="criterion.listValue">
and ${criterion.condition}
<foreach close=")" collection="criterion.value"
item="listItem" open="(" separator=",">
#{listItem}
</foreach>
</when>
</choose>
</foreach>
</trim>
</if>
</foreach>
</where>
</sql>
<sql id="Update_By_Example_Where_Clause">
<!-- WARNING - @mbg.generated This element is automatically generated by
MyBatis Generator, do not modify. -->
<where>
<foreach collection="example.oredCriteria" item="criteria"
separator="or">
<if test="criteria.valid">
<trim prefix="(" prefixOverrides="and" suffix=")">
<foreach collection="criteria.criteria" item="criterion">
<choose>
<when test="criterion.noValue">
and ${criterion.condition}
</when>
<when test="criterion.singleValue">
and ${criterion.condition} #{criterion.value}
</when>
<when test="criterion.betweenValue">
and ${criterion.condition} #{criterion.value}
and
#{criterion.secondValue}
</when>
<when test="criterion.listValue">
and ${criterion.condition}
<foreach close=")" collection="criterion.value"
item="listItem" open="(" separator=",">
#{listItem}
</foreach>
</when>
</choose>
</foreach>
</trim>
</if>
</foreach>
</where>
</sql>
<sql id="Base_Column_List">
<!-- WARNING - @mbg.generated This element is automatically generated by
MyBatis Generator, do not modify. -->
id, u_name, u_sex, u_age, birthday, address, remark
</sql>
<select id="selectByExample"
parameterType="com.ncs.pojo.UserExample" resultMap="BaseResultMap">
<!-- WARNING - @mbg.generated This element is automatically generated by
MyBatis Generator, do not modify. -->
select
<if test="distinct">
distinct
</if>
<include refid="Base_Column_List" />
from user
<if test="_parameter != null">
<include refid="Example_Where_Clause" />
</if>
<if test="orderByClause != null">
order by ${orderByClause}
</if>
</select>
<delete id="deleteByExample"
parameterType="com.ncs.pojo.UserExample">
<!-- WARNING - @mbg.generated This element is automatically generated by
MyBatis Generator, do not modify. -->
delete from user
<if test="_parameter != null">
<include refid="Example_Where_Clause" />
</if>
</delete>
<insert id="insert" parameterType="com.ncs.pojo.User">
<!-- WARNING - @mbg.generated This element is automatically generated by
MyBatis Generator, do not modify. -->
insert into user (id, u_name, u_sex,
u_age, birthday, address,
remark)
values (#{id,jdbcType=INTEGER}, #{uName,jdbcType=VARCHAR},
#{uSex,jdbcType=CHAR},
#{uAge,jdbcType=INTEGER},
#{birthday,jdbcType=TIMESTAMP}, #{address,jdbcType=VARCHAR},
#{remark,jdbcType=VARCHAR})
</insert>
<insert id="insertSelective" parameterType="com.ncs.pojo.User">
<!-- WARNING - @mbg.generated This element is automatically generated by
MyBatis Generator, do not modify. -->
insert into user
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">
id,
</if>
<if test="uName != null">
u_name,
</if>
<if test="uSex != null">
u_sex,
</if>
<if test="uAge != null">
u_age,
</if>
<if test="birthday != null">
birthday,
</if>
<if test="address != null">
address,
</if>
<if test="remark != null">
remark,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">
#{id,jdbcType=INTEGER},
</if>
<if test="uName != null">
#{uName,jdbcType=VARCHAR},
</if>
<if test="uSex != null">
#{uSex,jdbcType=CHAR},
</if>
<if test="uAge != null">
#{uAge,jdbcType=INTEGER},
</if>
<if test="birthday != null">
#{birthday,jdbcType=TIMESTAMP},
</if>
<if test="address != null">
#{address,jdbcType=VARCHAR},
</if>
<if test="remark != null">
#{remark,jdbcType=VARCHAR},
</if>
</trim>
</insert>
<select id="countByExample"
parameterType="com.ncs.pojo.UserExample" resultType="java.lang.Long">
<!-- WARNING - @mbg.generated This element is automatically generated by
MyBatis Generator, do not modify. -->
select count(*) from user
<if test="_parameter != null">
<include refid="Example_Where_Clause" />
</if>
</select>
<update id="updateByExampleSelective" parameterType="map">
<!-- WARNING - @mbg.generated This element is automatically generated by
MyBatis Generator, do not modify. -->
update user
<set>
<if test="record.id != null">
id = #{record.id,jdbcType=INTEGER},
</if>
<if test="record.uName != null">
u_name = #{record.uName,jdbcType=VARCHAR},
</if>
<if test="record.uSex != null">
u_sex = #{record.uSex,jdbcType=CHAR},
</if>
<if test="record.uAge != null">
u_age = #{record.uAge,jdbcType=INTEGER},
</if>
<if test="record.birthday != null">
birthday = #{record.birthday,jdbcType=TIMESTAMP},
</if>
<if test="record.address != null">
address = #{record.address,jdbcType=VARCHAR},
</if>
<if test="record.remark != null">
remark = #{record.remark,jdbcType=VARCHAR},
</if>
</set>
<if test="_parameter != null">
<include refid="Update_By_Example_Where_Clause" />
</if>
</update>
<update id="updateByExample" parameterType="map">
<!-- WARNING - @mbg.generated This element is automatically generated by
MyBatis Generator, do not modify. -->
update user
set id = #{record.id,jdbcType=INTEGER},
u_name =
#{record.uName,jdbcType=VARCHAR},
u_sex = #{record.uSex,jdbcType=CHAR},
u_age = #{record.uAge,jdbcType=INTEGER},
birthday =
#{record.birthday,jdbcType=TIMESTAMP},
address =
#{record.address,jdbcType=VARCHAR},
remark =
#{record.remark,jdbcType=VARCHAR}
<if test="_parameter != null">
<include refid="Update_By_Example_Where_Clause" />
</if>
</update>
</mapper>