- 首先在DAO层定义Mapper接口和对应的xml文件,接口中声明具体需要的方法,xml文件中写首先方法的语句。
public interface UserMapper {
//methods...
}
<?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">
<!-- namespace 映射文件的命名空间 写接口的全称 -->
<mapper namespace="com.test.dao.UserMapper">
<!--与方法对应的SQL -->
</mapper>
- 方法和SQL的具体定义
2.1新增
/**
* 新增 用户
* @param user
* @return
*/
int insertUser(User user);
<!--
新增操作
id - 对应接口中方法的名字
parameterType 参数类型
-->
<insert id="insertUser" parameterType="com.test.model.User">
insert into user
(username,password,sex)
values
<!--
#{对应传入的对象的set方法后的字符串首字母变小写,严格区分大小写的}
-->
(#{username},#{password},#{sex})
</insert>
2.2 删除
/**
* 删除用户
* @param userId
* @return
*/
int delete(int userId);
<!-- 删除 -->
<delete id="delete" parameterType="int">
delete from user where user_id = #{userId}
</delete>
2.3 修改
/**
* 修改用户
*
* 方法有多个参数时 ,参数名字自动命名为
* arg0 、arg1、...、 argn-1 例如:user->arg0 ,oldPassword->arg1
* 或者
* param1、param2、...、paramn 例如: user->param1, oldPassword->param2
* 或者给参数前面添加@Param("自定义名字") 例如
* int updatePassword(@Param("user") User user, @Param("oldPassword") String oldPassword);
*
* @param user
* @return
*/
int updatePassword(User user, String oldPassword);
<!-- 修改密码 传入多个参数 -->
<update id="updatePassword" >
update user set password = #{arg0.password}
where user_id = #{arg0.userId} and password = #{arg1}
</update>
2.4 查询
/**
* 登录查询功能
* @param username
* @param password
* @return 返回一个对象时,必须要保证 查询结果最多只有一条结果
*/
User login(@Param("username") String username, @Param("password") String password);
/**
* 查询用户 返回多条记录的
* @param map
* @return
*/
List<User> select(Map<String, Object> map);
<!--
查询语句一定要设置 resultType或者resultMap的属性 用来对结果集做映射的
resultType 自动映射,会将查询结果的列 自动映射到java中对象的属性,
需要对象类中有无参构造器或者相应的构造器
-->
<select id="login" resultType="com.test.model.User">
select
user_id userid,
username,
password,
sex
from
user
where
username = #{username}
and
password = #{password}
</select>
<select id="select" parameterType="java.util.Map" resultType="com.test.model.User">
select
user_id userid,
username,
password,
sex
from
user
where
<!-- 传入map参数时 ,参数名对应map的key -->
username like concat('%',#{username},'%')
</select>
- 创建一个工具类,静态加载mybatis配置文件并提供静态方法获得SqlSession对象和关闭SqlSession对象的方法
public class SqlSessionUtil {
private static SqlSessionFactory factory;
static {
//1. 读取mybatis的配置文件
Reader reader;
try {
reader = Resources.getResourceAsReader("mybatis-config.xml");
//2. 获取SqlSessionFactory对象 通过构造器模式创建了工厂对象
factory = new SqlSessionFactoryBuilder().build(reader);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 获取一个sql会话对象
* @return
*/
public static SqlSession openSession() {
return factory.openSession();
}
/**
* 关闭sql会话对象
* @param sqlSession
*/
public static void close(SqlSession sqlSession) {
if (sqlSession != null) {
sqlSession.close();
}
}
}
- Service层调用
public class UserService {
/**
* 新增用户
* @param user
*/
public void insertUser(User user) {
SqlSession sqlSession = SqlSessionUtil.openSession();
try {
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
userMapper.insertUser(user);
sqlSession.commit();
} finally {
SqlSessionUtil.close(sqlSession);
}
}
}