7.Mapper代理的形式开发
跟原生SQLSession接口一样需要搭建myabtis,
7.1 添加加依赖
7.2 创建SqlMapConfig.xml
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"/>
<environments default="dev">
<environment id="dev">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="UNPOOLED">
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<property name="url" value="${jdbc.url}"/>
<property name="driver" value="${jdbc.driver}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="UploadFilesMapper.xml"></mapper>
</mappers>
</configuration>
7.3 定义Mapper代理对象的接口
java
package com.neuedu.dao;
import com.neuedu.entity.UploadFile;
import com.neuedu.util.SqlSessionUtils;
import org.apache.ibatis.session.SqlSession;
import java.util.List;
import java.util.Map;
public interface UploadFilesMapper {
/**
* 查询集合
*
* @return
*/
/**
* com.neuedu.dao.UploadFilesDao.selectListofEntity
* @return
*/
public List<UploadFile> selectListofEntity();
/**
* com.neuedu.dao.UploadFilesDao.selectById
* @param id
* @return
*/
public UploadFile selectById(Integer id);
public int selectCount();
public int save(UploadFile uploadFile);
public int update(UploadFile uploadFile);
public int deleteById(Integer id);
}
7.4 编写Mapper映射文件
编写(UploadFilesMapper.xml)
- namespace为Mapper接口的全限定名
- 方法上:
- 方法名 跟 Mapperd Statement id保持一致
- 方法入参 跟Statement 的入参一致
- 返回值类型如果是集合List,否则是其他类型
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">
<mapper namespace="com.neuedu.dao.UploadFilesMapper">
<resultMap id="resultMap" type="com.neuedu.entity.UploadFile">
<!-- <id column="id" property="id" jdbcType="int" javaType="Integer"></id>-->
<id property="id" column="id"></id>
<result property="originName" column="origin_name"></result>
<result property="path" column="path"></result>
<result property="size" column="size"></result>
<result property="ip" column="ip"></result>
<result property="uploadTime" column="upload_time"></result>
</resultMap>
<!--使用 Entity 如果 字段跟属性名称不一致,set无效,需要有一个机制,转换 -->
<select id="selectListofEntity" resultMap="resultMap">
select * from upload_files
</select>
<!-- 根据主键查询一条 selectOne-->
<select id="selectById" resultMap="resultMap" parameterType="int">
select * from upload_files where id = #{id}
</select>
<!-- 查询总条数-->
<select id="selectCount" resultType="int">
select count(1) from upload_files
</select>
<!-- 插入数据-->
<insert id="save" parameterType="com.neuedu.entity.UploadFile">
INSERT INTO upload_files ( origin_name, path, upload_time, size, ip )
VALUES ( #{originName}, #{path}, #{uploadTime}, #{size}, #{ip} )
</insert>
<!-- 更新数据-->
<update id="update" parameterType="com.neuedu.entity.UploadFile">
UPDATE
upload_files
SET
origin_name= #{originName},
path= #{path},
upload_time= #{uploadTime},
size= #{size},
ip= #{ip}
WHERE id= #{id}
</update>
<!-- 根据主键删除数据-->
<delete id="deleteById" parameterType="int">
delete from upload_files where id = #{id}
</delete>
</mapper>
7.5 编写的Mapper.xml配置到SqlMapConfig.xml中
使用的是resource属性配置资源映射
<mappers>
<mapper resource="UploadFilesMapper.xml"></mapper>
</mappers>
7.6. 单元测试
java
package com.neuedu.dao;
import com.neuedu.dao.UploadFilesMapper;
import com.neuedu.entity.UploadFile;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;
import static org.junit.Assert.*;
public class UploadFilesMapperTest {
SqlSessionFactory sqlSessionFactory;
@Before
public void setup() throws IOException {
InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
}
@Test
public void selectListofEntity() {
SqlSession session = sqlSessionFactory.openSession();
UploadFilesMapper uploadFilesMapper = session.getMapper(UploadFilesMapper.class); //通过mybatis产生一个 代理对象
List<UploadFile> list = uploadFilesMapper.selectListofEntity();
for (UploadFile o : list) {
System.out.println(o);
}
}
@Test
public void selectById() {
SqlSession session = sqlSessionFactory.openSession();
UploadFilesMapper UploadFilesMapper = session.getMapper(UploadFilesMapper.class); //通过mybatis产生一个 代理对象
Integer id = 17;
System.out.println(UploadFilesMapper.selectById(id));
}
@Test
public void selectCount() {
SqlSession session = sqlSessionFactory.openSession();
UploadFilesMapper UploadFilesMapper = session.getMapper(UploadFilesMapper.class); //通过mybatis产生一个 代理对象
int count = UploadFilesMapper.selectCount();
System.out.println("count = " + count);
}
@Test
public void save() {
SqlSession session = sqlSessionFactory.openSession();
UploadFilesMapper UploadFilesMapper = session.getMapper(UploadFilesMapper.class); //通过mybatis产生一个 代理对象
UploadFile uploadFile = new UploadFile();
uploadFile.setOriginName("考试成绩.xls");
uploadFile.setPath("asdofuhsaofhsadofhsaofjshUploadFilesMapperp.xls");
uploadFile.setUploadTime(new Date());
uploadFile.setIp("127.0.0.1");
uploadFile.setSize(500L);
int count = UploadFilesMapper.save(uploadFile);
System.out.println("count = " + count);
}
@Test
public void update() {
SqlSession session = sqlSessionFactory.openSession();
UploadFilesMapper UploadFilesMapper = session.getMapper(UploadFilesMapper.class); //通过mybatis产生一个 代理对象
Integer id = 17;
UploadFile uploadFile = UploadFilesMapper.selectById(id);
System.out.println("update before : "+uploadFile);
uploadFile.setOriginName(uploadFile.getOriginName()+"-2021年3月22日16:19:14");
int count = UploadFilesMapper.update(uploadFile);
uploadFile = UploadFilesMapper.selectById(id);
System.out.println("count = " + count);
System.out.println("update after : "+uploadFile);
}
@Test
public void deleteById() {
SqlSession session = sqlSessionFactory.openSession();
UploadFilesMapper UploadFilesMapper = session.getMapper(UploadFilesMapper.class); //通过mybatis产生一个 代理对象
Integer id = 18;
int count = UploadFilesMapper.deleteById(id);
System.out.println("count = " + count);
}
}
7.7 使用Class 映射Mapper
在SqlMapConfig中使用class 映射Mapper 需要满足如下条件:
- mapper.xml中namespace为Mapper接口的全限定名一致
- Mapper.xml和Mapper.java文件名称保持一致(扩展名除外,xml、java)
- Mapper.xml和Mapper.java编译的目标位置相同
xml
<mappers>
<!--使用Class映射的Mapper -->
<mapper class="com.neuedu.dao.UploadFilesMapper"/>
</mappers>
7.8 使用package扫描
同class注册Mapper的要求是一样的
xml
<mappers>
<package name="com.neuedu.dao"/>
</mappers>
