MyBatis的增删改查
1、新增
<!--int insertUser();-->
<insert id="insertUser">
insert into t_user values(null,'hhh','123456',23,'女','12345@qq.com')
</insert>
@Test
public void testInsert() throws IOException {
//读取MyBatis的核心配置文件
InputStream is= Resources.getResourceAsStream("mappers/mybatis-config.xml");
//获取SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
//获取SqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
// // 获取sql的会话对象SqlSession对象(不会自动提交事务),是mybatis提供的操作数据库的对象
// SqlSession sqlSession = sqlSessionFactory.openSession();
// 获取sql的会话对象SqlSession对象(会自动提交事务),是mybatis提供的操作数据库的对象
SqlSession sqlSession = sqlSessionFactory.openSession(true);
//通过代理模式创建UserMapper接口的代理实现类对象
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//调用UserMapper接口中的方法,就可以根据UserMapper的全类名匹配元素文件,通过调用的方法名匹配映射文件中的SQL标签,并执行标签中的SQL语句
int result = userMapper.insertUser();
//提交事务
//sqlSession.commit();
System.out.println("结果:"+result);
sqlSession.close();
这个写法会比较麻烦,每个测试都要重新获取,所以在com.mybatis.utils下再建一个类:
package com.mybatis.utils;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.InputStream;
public class SqlSessionUtil {
public static SqlSession getSqlSession(){
SqlSession sqlSession=null;
try {
//读取MyBatis的核心配置文件
InputStream is= Resources.getResourceAsStream("mybatis-config.xml");
//获取SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
//获取SqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
// 获取sql的会话对象SqlSession对象(会自动提交事务),是mybatis提供的操作数据库的对象
sqlSession = sqlSessionFactory.openSession(true);
}catch (Exception e){
e.printStackTrace();
}
return sqlSession;
}
}
创建完成后就可在测试类直接写下属代码:
@Test
public void testInsert(){
SqlSession sqlSession= SqlSessionUtil.getSqlSession();
UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
int result = userMapper.insertUser();
System.out.println("结果:"+result);
sqlSession.close();
}
2、删除
<!--void deleteUser();-->
<delete id="deleteUser">
delete from t_user where id=2;
</delete>
@Test
public void testDelete(){
SqlSession sqlSession=SqlSessionUtil.getSqlSession();
UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
userMapper.deleteUser();
3、修改
<!--void updateUser();-->
<update id="updateUser">
update t_user set username='root',password='123' where id=2;
</update>
@Test
public void testUpdate(){
SqlSession sqlSession= SqlSessionUtil.getSqlSession();
UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
userMapper.updateUser();
sqlSession.close();
}
4、查询一个实体类对象
ResultMap和ResultType的区别:
resultType:设置结果类型,即查询的数据要转换为的java类型
resultMap:自定义映射,处理多对一或一对多的映射关系
<!--User getUserById();-->
<select id="getUserById" resultType="com.mybatis.pojo.User">
select * from t_user where id=1;
</select>
@Test
public void testGetUserById(){
SqlSession sqlSession=SqlSessionUtil.getSqlSession();
UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
User user=userMapper.getUserById();
System.out.println(user);
sqlSession.close();
}
5、查询list集合
<!-- List<User> getAllUser(); -->
<select id="getAllUser" resultType="User">
select * from t_user;
</select>
@Test
public void testGetAllUser(){
SqlSession sqlSession=SqlSessionUtil.getSqlSession();
UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
List<User> list=userMapper.getAllUser();
list.forEach(System.out::println);
sqlSession.close();
}