目录
一:别名映射
使用别名映射的原因:parameterType 和 resultType 的值 需要使用类的完全限定名,过于麻烦
希望使用简短的名字来代替 类的完全限定名
1.在核心配置文件中配置如下内容:(这里我拿登陆举例)
<typeAliases>
<!--
别名
type 类的完全限定名
alias 别名
-->
<!--为某个类指定别名-->
<typeAlias alias="login" type="com.lihaozhe.pojo.Login"/>
<typeAliases>
2.编写接口
com.lihaozhe.mapper
import com.lihaozhe.pojo.Login
import org.apache.ibatis.annotations.Param
public interface LoginMapper (
/**
*根据用户ID查找登录信息
*@param pid
*@return
*/
Login selectByPid(@param("pid") long pid)
}
3.编写映射配置文件
<?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.lihaozhe.mapper.LoginMapper">
<!--查找某账号的登录信息-->
<select id="selectByPid" resultType="login">
SELECT `pid`, `account`, `auth_text`, `pid`
FROM `login`
WHERE `pid` = #{pid}
</select>
</mapper>
为某个包下所有类做别名映射
原因:在核心配置文件中单独为某个类做别名映射 如果需要映射的类过多 则过于麻烦
所以可以指定某个包为其所有的类指定别名映射。
<typeAliases>
<!--
别名
type 类的完全限定名
alias 别名
-->
<!--为某个类指定别名-->
<!--<typeAlias alias="login" type="com.lihaozhe.pojo.Login"/>-->
<!--为某个包下的所有类指定别名 别名默认为类的首字母消息之后的字符串-->
<package name="com.lihaozhe.pojo"/>
</typeAliases>
二:增删改操作
首先,我们把(加载核心配置文件),(构建会话工厂),(从会话工厂中获取Session对象),
(将Session与线程绑定),(编写事务提交,关闭与回滚),封装到我们的工具类中。
package com.lihaozhe.util.mybatis;
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 java.io.IOException;
import java.io.Reader;
public class MyBatisUtil {
private static ThreadLocal<SqlSession> threadLocal = new ThreadLocal<>();
private static SqlSessionFactory sqlSessionFactory;
static {
// 核心配置文件classpath路径
String resource = "mybatis/mybatis-config.xml";
// 加载配置文件
Reader reader = null;
try {
reader = Resources.getResourceAsReader(resource);
// 构建会话工厂
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public static SqlSession getSqlSession(){
if (threadLocal.get() == null) {
// 从SqlSessionFactory对象中获取SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
threadLocal.set(sqlSession);
return sqlSession;
}
return threadLocal.get();
}
public static void close(){
if (threadLocal.get() != null) {
SqlSession sqlSession = threadLocal.get();
threadLocal.remove();
sqlSession.close();
}
}
public static void commitAndClose(){
if (threadLocal.get() != null) {
SqlSession sqlSession = threadLocal.get();
threadLocal.remove();
sqlSession.commit();
sqlSession.close();
}
}
public static void rollbackAndClose(){
if (threadLocal.get() != null) {
SqlSession sqlSession = threadLocal.get();
threadLocal.remove();
sqlSession.rollback();
sqlSession.close();
}
}
}
编写接口(这里我们用员工表模拟数据)
package com.lihaozhe.mapper;
import com.lihaozhe.pojo.Emp;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface EmpMapper {
int insert(@Param("emp") Emp emp);
int deleteById(@Param("eid") long eid);
int updateById(@Param("emp") Emp emp);
}
1.insert(增加数据)
2.updateById(修改数据)
3.deleteById(删除数据)
编写映射配置文件
<?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.lihaozhe.mapper.EmpMapper">
<insert id="insert" parameterType="emp" useGeneratedKeys="true" keyProperty="eid" keyColumn="eid">
insert into emp (ename, did)
values (#{emp.ename}, #{emp.did})
</insert>
<update id="updateById" parameterType="emp">
update emp
set `did` = #{emp.did},
`ename`= #{emp.ename}
where eid = #{emp.eid}
</update>
<delete id="deleteById">
delete
from emp
where eid = #{eid}
</delete>
</mapper>
三:进行测试
编写测试类
package com.lihaozhe.util.mybatis;
import cn.binarywang.tools.generator.ChineseAddressGenerator;
import cn.binarywang.tools.generator.ChineseNameGenerator;
import com.lihaozhe.mapper.EmpMapper;
import com.lihaozhe.pojo.Emp;
import org.apache.ibatis.session.SqlSession;
import org.junit.jupiter.api.Test;
public class MyBaitsTest {
@Test
public void insert(){
Emp emp = new Emp();
emp.setEname(ChineseNameGenerator.getInstance().generate());
emp.setDid(3l);
System.out.println(emp);
SqlSession sqlSession = MyBatisUtil.getSqlSession();
EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
mapper.insert(emp);
sqlSession.commit();
sqlSession.close();
System.out.println(emp);
}
@Test
public void updateBYIid (){
Emp emp = new Emp();
emp.setEname(ChineseNameGenerator.getInstance().generate());
emp.setDid(2l);
emp.setEid(201);
System.out.println(emp);
SqlSession sqlSession = MyBatisUtil.getSqlSession();
EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
mapper.updateById(emp);
sqlSession.commit();
sqlSession.close();
}
@Test
public void deleteBYIid (){
SqlSession sqlSession = MyBatisUtil.getSqlSession();
EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
mapper.deleteById(201);
sqlSession.commit();
sqlSession.close();
}
}