1、namespace
namespace中的包名要和Dao/mapper接口的包名一致。
2、select
选择、查询语句
id:就是对应namespace中的方法名
resultType:Sql语句执行的返回值。
parameterType:参数类型
编写接口
编写对应的mapper中的sql语句
测试
3、insert
4、update
5、delete
注意点:增删改需要提交事务!!!
sqlSession.commit();
源码如下:
创建接口,声明抽象方法
package com.wly.dao;
import com.wly.domain.User;
import java.util.List;
/**
* @author wly_fish
* @create 2021-05-02-22:29
*/
public interface UserDao {
//查询全部用户
List<User> getUserList();
//根据ID查询用户
User getUserById(int id);
//insert一个用户
int addUser(User user);
//修改用户
int updateUser(User user);
//删除一个用户
int deleteUser(int id);
}
关于抽象方法,在MyBatis中,执行的操作如果是增、删、改,返回值均使用`Integer`,表示受影响的行数;
方法的名称可以自定义,只要不违反Java的命名规则即可,另外,不允许在接口中使用重载机制;
参数也可以自定义,如果执行的是增加操作,参数应该是与数据表对应的实体类的类型。
在XML中配置接口方法对应的SQL语句
在`src/main/resources`下创建名为`mappers`文件夹,创建名为UserMapper.xml的文件
根节点必须是`<mapper>`,且根节点的`namespace`表示对应的接口文件,然后,添加子节点,以对应接口中的抽象方法:
路径要与java中的一致!
<?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.wly.dao.UserDao">
<select id="getUserList" resultType="com.wly.domain.User">
select * from user
</select>
<select id="getUserById" parameterType="int" resultType="com.wly.domain.User">
select * from mybatis.user where id = #{id}
</select>
<insert id="addUser" parameterType="com.wly.domain.User">
insert into mybatis.user (id,username,birthday,sex,address) values (#{id},#{username},#{birthday},#{sex},#{address})
</insert>
<update id="updateUser" parameterType="com.wly.domain.User">
update mybatis.user set username =#{username},address=#{address} where id = #{id}
</update>
<delete id="deleteUser" parameterType="int">
delete from mybatis.user where id = #{id};
</delete>
</mapper>
在测试类中测试
测试类的路径最好一致
package com.wly.dao;
import com.wly.domain.User;
import com.wly.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
/**
* @author wly_fish
* @create 2021-05-02-22:43
*/
public class UserDaoTest {
@Test
public void test(){
//第一步:获取SqlSession对象
SqlSession sqlSession = MybatisUtils.getSqlSession();
//第二步:getMapper
UserDao userDao = sqlSession.getMapper(UserDao.class);
List<User> userList = userDao.getUserList();
for(User user:userList){
System.out.println(user);
}
//关闭sqlSession
sqlSession.close();
}
@Test
public void getUserById(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserDao mapper = sqlSession.getMapper(UserDao.class);
User user = mapper.getUserById(45);
System.out.println(user);
sqlSession.close();
}
@Test
public void addUser() throws ParseException {
SqlSession sqlSession = MybatisUtils.getSqlSession();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = dateFormat.parse("2018-04-06 21:34:55");
UserDao mapper = sqlSession.getMapper(UserDao.class);
mapper.addUser(new User(10, "wly",date, "男", "nuist"));
sqlSession.commit();
sqlSession.close();
}
@Test
public void updateUser(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserDao mapper = sqlSession.getMapper(UserDao.class);
//mapper.updateUser(new User(10,"weiliyu","nuister"));
User user = new User();
user.setId(10);
user.setUsername("weiliyu");
user.setAddress("nuister");
mapper.updateUser(user);
sqlSession.commit();
sqlSession.close();
}
@Test
public void deleteUser(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserDao mapper = sqlSession.getMapper(UserDao.class);
mapper.deleteUser(10);
sqlSession.commit();
sqlSession.close();
}
}