Java -- MyBatis学习笔记4、简单CURD
1、使用MyBatis实现基本CURD
采用传统的Dao层开发方式、通过mybatis实现对数据库表基本功能、查询所有、查询单个、新增、删除、修改
- 在Dao层创建接口、有如下几个方法:
public interface UserInfoDao
{
public List<UserInfo> selectAll();
public UserInfo selectUser(int id);
public int insert(UserInfo userInfo);
public int update(UserInfo userInfo);
public int delete(int id);
}
- 实现接口、代码如下:
public class UserInfoDaoImpl implements UserInfoDao
{
private SqlSession sqlSession;
/**
* 通过构造函数、注入sqlSession对象
* @param sqlSession 调用者传入的sqlSession对象
*/
public UserInfoDaoImpl(SqlSession sqlSession)
{
this.sqlSession = sqlSession;
}
/**
* 查询所有
* @return 结果集合
*/
@Override
public List<UserInfo> selectAll()
{
return this.sqlSession.selectList("com.rg.dao.UserInfoDao.selectAll");
}
/**
* 查询单个
* @param id 条件id
* @return 单个对象
*/
@Override
public UserInfo selectUser(int id)
{
return this.sqlSession.selectOne("com.rg.dao.UserInfoDao.selectUser", id);
}
/**
* 新增数据
* @param userInfo 对象
* @return 受影响行数
*/
@Override
public int insert(UserInfo userInfo)
{
return this.sqlSession.insert("com.rg.dao.UserInfoDao.insert", userInfo);
}
/**
* 修改数据
* @param userInfo 对象
* @return 受影响行数
*/
@Override
public int update(UserInfo userInfo)
{
return this.sqlSession.update("com.rg.dao.UserInfoDao.update", userInfo);
}
/**
* 删除数据
* @param id 条件id
* @return 受影响行数
*/
@Override
public int delete(int id)
{
return this.sqlSession.delete("com.rg.dao.UserInfoDao.delete", id);
}
}
- 在Dao层创建mapper映射文件、如下:
<mapper namespace="com.rg.dao.UserInfoDao">
<!--
id:推荐使用接口中方法名称
resultType:sql语句返回值类型、这里虽然最后结果是集合、但是集合中存的是UserInfo
-->
<select id="selectAll" resultType="com.rg.entity.UserInfo">
select * from UserInfo
</select>
<select id="selectUser" resultType="com.rg.entity.UserInfo">
select * from UserInfo where id = #{id}
</select>
<insert id="insert" parameterType="com.rg.entity.UserInfo">
insert into UserInfo(Name,Age) values(#{Name},#{Age})
</insert>
<update id="update" parameterType="com.rg.entity.UserInfo">
update UserInfo set Name=#{Name},Age=#{Age} where id = #{id}
</update>
<delete id="delete" parameterType="int">
delete from UserInfo where id=#{id}
</delete>
</mapper>
- 在测试类中测试、如下:
private UserInfoDao userInfoDao;
private SqlSession sqlSession;
@Before
public void init() throws IOException
{
//mybatis主配置文件
String config = "mybatis.xml";
//读取配置文件
InputStream is = Resources.getResourceAsStream(config);
//创建SqlSessionFactory对象,目的是获取SqlSession
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
//获取SqlSession对象,SqlSession能执行sql语句
this.sqlSession = sqlSessionFactory.openSession();
this.userInfoDao = new UserInfoDaoImpl(sqlSession);
}
@After
public void finish()
{
//关闭selectList,释放资源
this.sqlSession.close();
}
@Test
public void selectAll()
{
//执行SqlSession的selectList()
List<UserInfo> userList = this.userInfoDao.selectAll();
//循环输出集合中的结果
userList.forEach(x -> System.out.println(x));
}
@Test
public void selectUser()
{
UserInfo userInfo = this.userInfoDao.selectUser(2);
System.out.println(userInfo);
}
@Test
public void insert()
{
UserInfo userInfo = new UserInfo();
userInfo.setName("张飞");
userInfo.setAge(16);
int result = this.userInfoDao.insert(userInfo);
sqlSession.commit();
System.out.println(result);
}
@Test
public void update()
{
UserInfo userInfo = new UserInfo();
userInfo.setId(2);
userInfo.setName("李白");
userInfo.setAge(20);
int result = this.userInfoDao.update(userInfo);
sqlSession.commit();
System.out.println(result);
}
@Test
public void delete()
{
int result = this.userInfoDao.delete(2);
sqlSession.commit();
System.out.println(result);
}
这样、通过MyBatis就实现了对数据库表的简单CURD。