1.MyBatis之CRUD
1.1 查询
mybatis配置请参考:https://blog.csdn.net/Yearingforthefuture/article/details/115683636
namespace:全限定类名,后面记得加类名。com.test.dao.UserDao
id:指具体方法名称。
parameterType:参数类型。
resultType:返回结果类型。
UserDao.java
public interface UserDao {
//根据Id查询用户
User getUserById(int id);
}
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="com.test.dao.UserDao">
<select id="getUserById" parameterType="int" resultType="com.test.pojo.User">
select * from user where id=#{id}
</select>
</mapper>
测试
@Test
public void test2() {
SqlSession sqlSession = null;
try {
//1.获取session对象
sqlSession= MybatisUtils.getSqlSession();
//2.获取Dao对象
UserDao userDao = sqlSession.getMapper(UserDao.class);
User user = userDao.getUserById(1);
System.out.println(user);
} catch (Exception e){
e.printStackTrace();
}finally {
//3.关闭sqlSession
sqlSession.close();
}
}
1.2 增加
注意:
增删改必须加上提交事务!!!
在UserMapper.xml中insert标签没有返回值
UserDao.java
public interface UserDao {
//增加用户
int addUser(User user);
}
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="com.test.dao.UserDao">
<insert id="addUser" parameterType="com.test.pojo.User" >
insert into user(id, name, pwd) values (#{id},#{name},#{pwd});
</insert>
</mapper>
测试
@Test
public void test3() {
SqlSession sqlSession = null;
try {
//1.获取session对象
sqlSession= MybatisUtils.getSqlSession();
//2.获取Dao对象
UserDao userDao = sqlSession.getMapper(UserDao.class);
int num = userDao.addUser(new User(4, "哈哈", "1233333"));
if (num > 0) {
System.out.println("插入成功!");
}
sqlSession.commit();
} catch (Exception e){
e.printStackTrace();
}finally {
//3.关闭sqlSession
sqlSession.close();
}
}
1.3 修改
UserDao.java
public interface UserDao {
//修改用户
int updateUser(User user);
}
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="com.test.dao.UserDao">
<update id="updateUser" parameterType="com.test.pojo.User" >
update user set name=#{name},pwd=#{pwd} where id=#{id};
</update>
</mapper>
测试
@Test
public void test4() {
SqlSession sqlSession = null;
try {
//1.获取session对象
sqlSession= MybatisUtils.getSqlSession();
//2.获取Dao对象
UserDao userDao = sqlSession.getMapper(UserDao.class);
int num = userDao.updateUser(new User(4, "呵呵", "123123123"));
if (num > 0) {
System.out.println("修改成功!");
}
sqlSession.commit();
} catch (Exception e){
e.printStackTrace();
}finally {
//3.关闭sqlSession
sqlSession.close();
}
}
1.4 删除
UserDao.java
public interface UserDao {
//删除用户
int deleteUser(int id);
}
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="com.test.dao.UserDao">
<delete id="deleteUser" parameterType="int" >
delete from user where id=#{id}
</delete>
</mapper>
测试
@Test
public void test5() {
SqlSession sqlSession = null;
try {
//1.获取session对象
sqlSession= MybatisUtils.getSqlSession();
//2.获取Dao对象
UserDao userDao = sqlSession.getMapper(UserDao.class);
int num = userDao.deleteUser(4);
if (num > 0) {
System.out.println("删除成功!");
}
sqlSession.commit();
} catch (Exception e){
e.printStackTrace();
}finally {
//3.关闭sqlSession
sqlSession.close();
}
}
2. 万能Map
假设,我们的实体类,或者数据库中的表,字段或者参数过多,我们应当考虑使用Map!
演示:
UserDao.java
public interface UserDao {
//修改用户名称
int updateUser2(Map<String,Object> map);
}
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="com.test.dao.UserDao">
<update id="updateUser2" parameterType="map" >
update user set name=#{userName} where id=#{userId};
</update>
</mapper>
测试
@Test
public void test6() {
SqlSession sqlSession = null;
try {
sqlSession = MybatisUtils.getSqlSession();
UserDao userDao = sqlSession.getMapper(UserDao.class);
Map<String,Object> map = new HashMap<String,Object>();
map.put("userName","刘备");
map.put("userId",3);
int num = userDao.updateUser2(map);
if (num > 0) {
System.out.println("修改成功!");
}
sqlSession.commit();
}catch (Exception e) {
e.printStackTrace();
}finally {
sqlSession.close();
}
}
- Map传递参数,直接在sql中取出key即可!【parameterType=“map”】
- 对象传递参数,直接在sql中取对象的属性即可!【parameterType=“Object”】
- 只有一个基本类型参数的情况下,可以直接在sql中取到!
- 多个参数用Map,或者注解!
3. 模糊查询
1.Java代码执行的时候,传递通配符% %
List<User> userList = mapper. getUserlike ("%李%");
2.在sq|拼接中使用通配符% %
select * from mybatis.user where name like "%"#{value}"%"