Mybatis的CRUD操作
实现查询操作:
使用的标签:select标签
标签常用的属性:
- id:对应namespace的中的方法名
- resultType:sql语句执行的返回值
- parameterType:方法中的参数类型
问题:如果涉及到到多个参数传递呢??解决方法:通过传入的参数装进map集合 或者 使用注解的方法。 这里就只说明用map集合的方法。
解释:map集合的键使用String类型,对应与sql语句配置文件中的 如 #{id} 这个对应 ,即 map的键写成id即可,而值就是对应需要查找的类型。
<!--根据指定id和username获取数据-->
<select id="getUser3" resultType="com.domain.User" parameterType="hashmap">
select * from mybatis.user where username = #{username} and id = #{id}
</select>
其UserDao的抽象方法(方法名对应配置文件的select标签的id属性)
//根据指定id,和用户名查找
User getUser1(HashMap<String ,Object> hashMap);
测试类:
@Test
public void getUserTest(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserDao userDaoImpl = sqlSession.getMapper(UserDao.class);
HashMap<String, Object> hashMap = new HashMap<String, Object>();
hashMap.put("username","张三");
hashMap.put("id",1);
User user = userDaoImpl.getUser1(hashMap);
System.out.println(user);
//User{id=1, username='张三', password='123456'}
sqlSession.close();
}
尝试一下模糊查询:如使用 like
<!--模糊查询获取数据-->
<select id="getUser2" resultType="com.domain.User" parameterType="hashmap">
select * from mybatis.user where username like #{username}
</select>
//模糊查询
User getUser2(HashMap<String ,Object> hashMap);
//模糊查询
@Test
public void getUser2Test(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserDao userDaoImpl = sqlSession.getMapper(UserDao.class);
HashMap<String, Object> hashMap = new HashMap<String, Object>();
hashMap.put("username","%李%");
User user = userDaoImpl.getUser2(hashMap);
System.out.println(user);
sqlSession.close();
}
注意:不在配置文件中加入%%这个通配符,不然会易造成sql注入问题
增数据:
//向数据库插入数据
void insertUser(User user);
<!--插入数据-->
<insert id="insertUser" parameterType="com.domain.User">
insert into mybatis.user (id,username,password) values (#{id},#{username},#{password}) ;
</insert>
@Test
public void insertUserTest(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserDao userDaoImpl = sqlSession.getMapper(UserDao.class);
User user = new User(5, "王五", "234232");
userDaoImpl.insertUser(user);
//一定要记得增删改需要提交事务
sqlSession.commit();
sqlSession.close();
}
注意:增删改记得提交事务,不然是不能操作数据库成功的。
删数据:
//根据id删除数据
void deleteUser(int id);
<!--删除数据-->
<delete id="deleteUser" parameterType="int" >
delete from mybatis.user where id = #{id}
</delete>
//删除数据
@Test
public void deleteUserTest(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserDao userDaoImpl = sqlSession.getMapper(UserDao.class);
userDaoImpl.deleteUser(4);
//一定要记得增删改需要提交事务
sqlSession.commit();
sqlSession.close();
}
改数据:
//改动数据
void updateUser(Map<String,Object> map);
<!--修改数据-->
<update id="updateUser" parameterType="map" >
update mybatis.user set username = #{username} where id = #{id}
</update>
//更改数据
@Test
public void updateUserTest(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserDao userDaoImpl = sqlSession.getMapper(UserDao.class);
Map<String, Object> map = new HashMap<String, Object>();
map.put("username" ,"赵六");
map.put("id",5);
userDaoImpl.updateUser(map);
//一定要记得增删改需要提交事务
sqlSession.commit();
sqlSession.close();
}
还是注意:增删改操作需要提交事务