1. 添加操作
1.1 在 UserMapper 接口中新增 insertUser()
方法
public interface UserMapper {
List< User> listAllUsers ( ) ;
int insertUser ( User user) ;
}
1.2 在 Mapper 映射文件 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 = " cn.ykf.mapper.UserMapper" >
< select id = " listAllUsers" resultType = " cn.ykf.pojo.User" >
SELECT * FROM user
</ select>
< insert id = " insertUser" parameterType = " cn.ykf.pojo.User" >
INSERT INTO user(username,birthday,sex,address) VALUES (#{username},#{birthday},#{sex},#{address})
</ insert>
</ mapper>
温馨提示
在编写映射文件的时候,可以先在 MySQL 客户端写好可以正常运行的 SQL 语句,然后将其搬运到映射文件中,并把原本的实际参数都替换为 Mybatis 的参数符号
parameterType
表示将会传入这条语句的参数类的完全限定名或别名。
其中的参数符号#{username}
,#{birthday}
,#{birthday}
,#{sex}
,#{address}
必须和User类的每个属性名一一对应,不可以乱写。
属性名是实体类的getXxx()/setXxx()
中Xxx
部份,大多数情况下就是成员变量名,也有少数情况不是成员变量名,也就是说成员变量和属性不能等同。
关于配置文件的相关说明,可以查看官网文档:Mybatis的XML映射文件
1.3 测试添加操作
public class MybatisTest {
private InputStream is;
private SqlSession sqlSession;
private UserMapper mapper;
@Before
public void init ( ) throws Exception {
is = Resources. getResourceAsStream ( "mybatis-config.xml" ) ;
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder ( ) ;
SqlSessionFactory factory = builder. build ( is) ;
sqlSession = factory. openSession ( ) ;
mapper = sqlSession. getMapper ( UserMapper. class ) ;
}
@After
public void destory ( ) throws Exception {
sqlSession. commit ( ) ;
sqlSession. close ( ) ;
is. close ( ) ;
}
@Test
public void testInsertUser ( ) {
User user = new User ( ) ;
user. setUsername ( "鱼开饭" ) ;
user. setBirthday ( new Date ( ) ) ;
user. setSex ( "男" ) ;
user. setAddress ( "广东" ) ;
int count = mapper. insertUser ( user) ;
System. out. println ( "添加条数为 : " + count) ;
}
}
这里有一点需要注意,如果在destory()
方法中没有通过sqlSession.commit();
来提交事务的话,那么添加的记录不会写入到数据库中。
因为我们在调用openSession()
时并没有设置事务自动提交,所以最终事务会自动回滚,导致记录没有写入到数据库中。见下图
openSession()
的重载方法如下图,因此,如果需要自动提交事务,只需factory.openSession(true);
即可。
1.4 测试结果
2. 删除操作
2.1 在 UserMapper 接口中新增 deleteUserById()
方法
int deleteUserById ( Integer userId) ;
2.2 在 Mapper 映射文件 UserMapper.xml
中配置删除操作
< delete id = " deleteUserById" parameterType = " java.lang.Integer" >
DELETE FROM user WHERE id = #{uid}
</ delete>
这里有两点需要注意一下!
第一点,如果参数是基本类型或者基本类型的包装类,且只有一个参数,那么参数符号可以随便写 。也就是说,虽然 Mapper 接口中的方法声明为 int deleteUserById(Integer userId)
,但是映射文件中既可以写 #{userId}
,也可以写 #{aaaa}
。
第二点,parameterType
写int
、INT
、INTEGER
、integer
、java.lang.Integer
都可以。
2.3 测试删除操作
@Test
public void testDeleteUserById ( ) {
int count = mapper. deleteUserById ( 50 ) ;
System. out. println ( "删除条数为 : " + count) ;
}
2.4 测试结果
3. 修改操作
3.1 在 UserMapper 接口中新增 updateUser
方法
int updateUser ( User user) ;
3.2 在 Mapper 映射文件 UserMapper.xml
中配置修改操作
< update id = " updateUser" parameterType = " cn.ykf.pojo.User" >
UPDATE user SET username = #{username}, birthday = #{birthday}, sex = #{sex}, address = #{address} WHERE id = #{id}
</ update>
3.3 测试修改操作
@Test
public void testUpdateUser ( ) {
User user = new User ( ) ;
user. setUsername ( "update" ) ;
user. setAddress ( "test" ) ;
user. setSex ( "女" ) ;
user. setBirthday ( new Date ( ) ) ;
user. setId ( 49 ) ;
int count = mapper. updateUser ( user) ;
System. out. println ( "修改条数为 : " + count) ;
}
3.4 测试结果