请关注知了堂学习社区:知了学习
本文中使用到的测试环境是上一篇博文中的测试环境。
一、基于XML的实现
1、定义sql映射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,
namespace的值习惯上设置成包名+sql映射文件名,这样就能够保证namespace的值是唯一的
-->
<mapper namespace="com.zlt.mapping.userMapper">
<!-- id属性值必须是唯一的,不能够重复,称为statement的id
将sql语句封装在mapperStatement的对象中,所以Id称为Statement的id
使用parameterType属性指明查询时使用的参数类型,
resultType属性指明查询返回的结果集类型
#{} : 表示一个占位符,指定输入参数
-->
<!-- 根据ID得到一个user对象 -->
<select id="getUser" parameterType="java.lang.Integer"
resultType="com.zlt.model.User" >
SELECT * FROM users WHERE id = #{id}
</select>
<!-- 更新用户信息 -->
<update id="updateUser" parameterType="com.zlt.model.User">
update users set username=#{username},mobile=#{mobile} where id=#{id}
</update>
<!-- mybatis支持把多条查询结果封装成List集合 -->
<!-- 查询全部用户 -->
<select id="getAllUser" resultType="com.zlt.model.User">
select * from users
</select>
</mapper>
2、测试:
public static void main(String[] args) {
new Test().testGetOne01();
}
//基于xml文件
public void testGetOne01() {
SqlSession sqlSession = MyBatisUtil.getSqlSession();
User user = sqlSession.selectOne("com.zlt.mapping.userMapper.getUser", 1);
System.out.println(user.toString());
//使用SqlSession执行完SQL之后需要关闭SqlSession
sqlSession.close();
}
public void testGetAll01() {
SqlSession sqlSession = MyBatisUtil.getSqlSession();
List<User> user = sqlSession.selectList("com.zlt.mapping.userMapper.getAllUser");
for(User u : user) {
System.out.println(u.toString());
}
sqlSession.close();
}
二、基于注解的实现
1、定义sql映射的接口
package com.zlt.mapping;
import java.util.List;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import com.zlt.model.User;
/**
* 定义sql映射的接口,使用注解指明要执行的SQL
* @author admin_yt
*
*/
public interface UserMapperR {
/**
* mybatis同样接口注解方法实现对数据库的CRUD操作
* 关键字 : @Insert @Select @Update @Delete
* 注意:注解方法适合简短的SQL语句数据库操作(不常用)
*/
@Select("select * from users where id=#{id}")
public User getUserById(Integer id);
@Select("select * from users")
public List<User> getUserAll();
@Update("update users set username=#{username},mobile=#{mobile} where id=#{id}")
public int updateUser(User user);
}
需要说明的是,我们不需要针对UserMapperR接口去编写具体的实现类代码,这个具体的实现类由MyBatis帮我们动态构建出来,我们只需要直接拿来使用即可。
2、需要我们在mybatis-config.xml文件中注册这个映射接口
<!-- 注册映射mapper文件 -->
<mappers>
<!-- 注册userMapper.xml文件,
userMapper.xml位于com.zlt.mapping这个包下,所以resource写成com/zlt/mapping/userMapper.xml-->
<mapper resource="com/zlt/mapping/userMapper.xml" />
<!-- 注册映射接口 -->
<mapper class="com.zlt.mapping.UserMapperR"/>
</mappers>
3、测试
//基于接口注解
public void testGetOne02() {
SqlSession sqlSession = MyBatisUtil.getSqlSession();
UserMapperR mapperR = sqlSession.getMapper(UserMapperR.class);
System.out.println(mapperR.getUserById(1).toString());
sqlSession.close();
}
public void testGetAll02() {
SqlSession sqlSession = MyBatisUtil.getSqlSession();
UserMapperR mapperR = sqlSession.getMapper(UserMapperR.class);
List<User> user = mapperR.getUserAll();
for(User u : user) {
System.out.println(u.toString());
}
sqlSession.close();
}
public void updateUser() {
SqlSession sqlSession = MyBatisUtil.getSqlSession(true);
UserMapperR mapperR = sqlSession.getMapper(UserMapperR.class);
User user = mapperR.getUserById(1);
System.out.println("更新前:"+user);
user.setUsername("yt");
user.setMobile("123456789");
System.out.println("修改后:"+user);
int userList = mapperR.updateUser(user);
System.out.println("更新后:"+mapperR.getUserById(1));
sqlSession.close();
}
updateUser方法更新结果:
本文用到的MyBatisUtil工具类代码如下:
package com.zlt.util;
import java.io.InputStream;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class MyBatisUtil {
//获取sqlsessionfactory
private static SqlSessionFactory getSqlSesionFactory() {
String resource = "mybatis-config.xml";
InputStream is = MyBatisUtil.class.getClassLoader().getResourceAsStream(resource);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
return factory;
}
//获取sqlsession
public static SqlSession getSqlSession() {
return getSqlSesionFactory().openSession();
}
//获取sqlsession,是否自动提交事务--增删改都需要提交事务
public static SqlSession getSqlSession(boolean isAutoCommit) {
return getSqlSesionFactory().openSession(isAutoCommit);
}
}
注意使用完后需要关闭sqlSession