内容
1.Mybatis框架的Mapper代理模式
2.Mybatis完成CRUD操作
3.Mybatis中参数说明
4.Mybatis配置文件说明
Mybatis的Mapper代理模式
Mapper代理模式
含义:
开发人员在遵循Mybatis提供的一些规范的前提下,Mybatis帮助我门自动生成dao接口的实现类。
规范:
1.映射文件中命名空间等于dao层接口的全路径。
2.映射文件中SQL语句的id是dao层接口的方法名。
3.映射文件中输入参数和输出参数的类型和dao层接口里的方法的参数和返回结果保持一致。
项目结构:

Mybatis完成CRUD操作
1.全局配置文件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>
<properties resource="db.properties">
</properties>
<typeAliases>
<package name="com.mybatis03.bean"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/mybatis03/bean/UserMapper.xml"/>
</mappers>
</configuration>
2.映射文件UserMapper.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.mybatis03.dao.UserDao">
<!-- 根据Id查询用户,返回值写User-->
<select id="selectUser" parameterType="int" resultType="User">
select *
from user
where id = #{id}
</select>
<!--查询所有用户,返回值类型写List的泛型User-->
<select id="selectAll" resultType="User">
select *
from user
</select>
<!--根据姓名模糊查询-->
<select id="selectUserByName" parameterType="User"
resultType="User">
select *
from user
where username like CONCAT('%', #{username}, '%');
</select>
<!--插入数据-->
<insert id="addUser" parameterType="User">
<selectKey keyProperty="id" keyColumn="id" resultType="int" order="AFTER">
select 1548975
</selectKey>
insert into user values (null,#{username},#{birthday},#{sex},#{address})
</insert>
<!--修改数据-->
<update id="changeUser" parameterType="User">
update user
set username=#{username},
sex=#{sex}
where id = #{id}
</update>
<!--删除数据-->
<delete id="delUser" parameterType="int">
delete
from user
where id = #{id};
</delete>
3.创建dao层接口UserDao
public interface UserDao {
//根据Id查询用户,返回值写User
User selectUser(int id);
//查询所有用户,返回值类型写List的泛型User
List<User> selectAll();
//根据姓名模糊查询
List<User> selectUserByName(User user);
//插入数据
int addUser(User user);
//修改数据
int changeUser(User user);
//删除数据
int delUser(int id);
}
4.创建UserTest测试类
1.创建加载配置文件和生成接口实现类的方法:
public class UserTest {
SqlSession sqlSession;
UserDao ud;
//创建加载配置文件的和生成接口实现类的方法
@Before
public void setUp() throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
sqlSession = sqlSessionFactory.openSession();
ud = sqlSession.getMapper(UserDao.class);
}
}
2.创建提交事务和关闭SqlSession的方法:
@After
public void finish() {
sqlSession.commit();
sqlSession.close();
}
3.开始编写接口测试方法:
//查询一个
@Test
public void selectOne() {
User user = ud.selectUser(1);
System.out.println(user);
}
//查询所有
@Test
public void selectAll() {
List<User> users = ud.selectAll();
System.out.println(users);
}
//添加用户
@Test
public void addUser() {
User user = new User();
user.setUsername("王小明");
user.setSex("男");
user.setBirthday(new Date());
user.setAddress("河南");
System.out.println("插入前:" + user.getId());
int i = ud.addUser(user);
sqlSession.commit();//提交事务
System.out.println("插入后:" + user.getId());
System.out.println(i);
}
//修改用户
@Test
public void changeUser() {
User user = new User();
user.setId(21);
user.setUsername("小樱");
user.setSex("女");
user.setBirthday(new Date());
user.setAddress("河南");
int i = ud.changeUser(user);
sqlSession.commit();
System.out.println(i);
}
//删除用户
@Test
public void delUser() {
int i = ud.delUser(22);
sqlSession.commit();
System.out.println(i);
}
//模糊查询
@Test
public void selectUserByName() {
User user = new User();
user.setUsername("阿");
List<User> users = ud.selectUserByName(user);
sqlSession.commit();
System.out.println(users);
}
Mybatis中参数说明:
1.两个参数详解:
1.parameterType:输入参数类型(int,String,对象,List,Map等)
注意:
1.#{}等价于占位符‘?’:
输入参数是非自定义类型:#{任意定义},
输入参数是自定义类型:#{自定义类型的属性名}。
2.${}等价于拼接方式:
输入参数是非自定义类型(String除外):${任意定义},
输入参数是自定义类型:${自定义类型的属性名},
String类型作为输入参数:${value}
2.resultType:返回结果类型(int,String,对象,List,map)
2.输入多个参数
首先准备好:创建UserDao接口和UserMapper.xml
1.多个参数封装到一个对象里:
public List<User> getByNameAndSex(User user);
<!-- 方法一:根据用户的姓名模糊查询并且根据用户的性别精确查询,${}是拼接字符串 -->
<select id="getByNameAndSex" parameterType="com.mybatis03.bean.User" resultType="com.mybatis03.bean.User">
select * from user where username like "%"#{username}"%" and sex=#{sex}
</select>
2.多个参数封装到一个Map里:
public List<User> getByNameAndSexbak(Map map);
<!-- 方法二:将用户的姓名和性别封装map里 -->
<select id="getByNameAndSexbak" parameterType="map" resultType="com.mybatis03.bean.User">
select * from user where username like "%"#{uname}"%" and sex=#{usex}
</select>
3.将多个参数通过注解的方式传到xml中 @Param("变量a")----#{变量a}:
public List<User> getByNameAndSexbak1(@Param("username") String uname,@Param("usex")String sex);
<!-- 方法三:接口中的方法里有多个参数,通过注解传递 -->
<select id="getByNameAndSexbak1" resultType="com.mybatis03.bean.User">
select * from user where username like "%"#{username}"%" and sex=#{usex}
</select>
3.查询最新插入数据的主键
1.UserMapper.xml代码如下:
<!--插入数据,查询最新插入数据的主键-->
<insert id="addUser" parameterType="User">
<!-- keyProperty:主键对应的属性名
keyColumn:主键对应的列名
resultType:主键的类型
order="AFTER":主键在插入之后生成
1548975:查询主键的函数
-->
<selectKey keyProperty="id" keyColumn="id" resultType="int" order="AFTER">
select 1548975
</selectKey>
insert into user values (null,#{username},#{birthday},#{sex},#{address})
</insert>
将查询到的主键赋值到输入参数对象User的主键属性(id)
2.UserDao接口代码:
int addUser(User user);
3.UserTest测试类:
@Test
public void addUser() {
User user = new User();
user.setUsername("王小明");
user.setSex("男");
user.setBirthday(new Date());
user.setAddress("北京");
System.out.println("插入前:" + user.getId());
int i = ud.addUser(user);
sqlSession.commit();//提交事务
System.out.println("插入后:" + user.getId());
System.out.println(i);
}
Mybatis配置文件说明
1.配置文件中所有标签是有序的
2.数据源环境
<!--environments:数据库环境配置的详细配置-->
<environments default="development">
<!--environment:数据库环境配置的详细配置-->
<environment id="development">
<!--transactionManager:指定MyBatis的事务管理器-->
<transactionManager type="JDBC"/>
<!-- dataSource:指连接源配置,POOLED是JDBC连接对象的数据源连接池的实现-->
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
3.Mappers:管理映射文件(4种)
<!--映射文件 -->
<mappers>
<!-- 单个管理映射文件 -->
<!-- <mapper resource="com/mybatis03/bean/UserMapper.xml"/> -->
<!-- 批量管理映射文件,name:映射文件所在的包名(保证映射文件和接口同包同名) -->
<!-- <package name="com.mybatis03.dao"/> -->
<!--(保证映射文件和接口同包同名) -->
<!-- <mapper class="com.mybatis03.dao.UserDao"/> -->
<mapper url="file:///D:\mybatis03\src\com\mybatis03\dao\UserDao.xml"/>
</mappers>
4.properties:引入外部的properties文件
<properties resource="db.properties">
</properties>
5.typeAliases:为映射文件中输入输出类型指定别名
<typeAliases>
<!-- 为映射文件中的输入输出类型,进行单个起别名 -->
<!-- <typeAlias type="com.offcn.mybatis03.User" alias="u"/> -->
<!-- 批量起别名,name:实体类所在的包名user/User -->
<package name="com.mybatis03.bean"/>
</typeAliases>