3.CRUD(增删改查)
1.namespace
namespace即“命名空间”,也称“名称空间” 。是许多编程语言使用的一种代码组织的形式,通过命名空间来分类,区别不同的代码功能,避免不同的代码片段(通常由不同的人协同工作或调用已有的代码片段)同时使用时由于不同代码间变量名相同而造成冲突。
注意:
- namespac中的包名要和Dao/Mapper接口名一致
2.select(查询)
选择,查询语句
<mapper **namespace**="com.itxiaofei.dao.UserMapper">
<select id="getUserList" resultType="com.itxiaofei.pojo.User"">
select * from mybatis.user
</select>
</mapper>
- id:就是对应namespace中的方法名;
- resultType:SQL语句执行的返回值!
- parameterType:参数类型
代码整理:
1.UserMapper
//获取全部用户
List<User> getUserList();
//根据id查询用户
User getUserById(int id);
//insert(增加一个用户)
2.UserMapper.xml(UserMapper接口的实现类)
<mapper namespace="com.itxiaofei.dao.UserMapper">
<select id="getUserList" resultType="com.itxiaofei.pojo.User">
select * from mybatis.user
</select>
<!--parameterType:参数类型-->
<select id="getUserById" parameterType="int" resultType="com.itxiaofei.pojo.User">
select * from mybatis.user where id = 1
</select>
</mapper>
3.UserDaoTest
//查询全部
@Test
public void test(){
//第一步获得SqlSession对象
SqlSession sqlSession= MybatisUtils.getSqlSession();
//方式一:getMapper:执行SQL
//注:利用getMapper得到接口,就可以返回接口,返回接口就可以执行接口里面的方法
UserMapper userDao = sqlSession.getMapper(UserMapper.class);
List<User> userList = userDao.getUserList();
//方式二:老方式查找UserDao(接口里的方法getUserList)不推荐使用
//List<User> userList = sqlSession.selectList("com.itxiaofei.dao.UserDao.getUserList");
//如何遍历一个数组:利用for循环:userList.for
for (User user : userList) {
System.out.println(user);
}
//关闭sqlSession
sqlSession.close();
}
//查询单个
@Test
//这里使用public(公有) 不要用 private(私有)
public void getUserById(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
//获取UserMapper
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//调用UserMapper里的getUserById方法。
User userById = mapper.getUserById(1);
//输出getUserById的方法结果
System.out.println(userById);
//关闭sqlSession
sqlSession.close();
}
3.insert(增加)
代码整理:
1.UserMapper(接口)
//insert(增加一个用户)
int addUser(User user);
2.UserMapper.xml
<mapper namespace="com.itxiaofei.dao.UserMapper">
<!--增加用户-->
<insert id="addUser" parameterType="com.itxiaofei.pojo.User">
insert into mybatis.user(id,name,pwd) value(#{id},#{name},#{pwd});
</insert>
</mapper>
3.UserDaoTest
@Test
public void addUser(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
int res = mapper.addUser(new User(6, "小明", "123456"));
//该判断加不加也行,就是为了直观的看到是否插入成功
if (res>0){
System.out.println("插入成功");
}
//提交事务
sqlSession.commit();
//关闭sqlSession
sqlSession.close();
}
4.update(修改)
代码整理:
1.UserMapper
//update(修改一个用户)
int upDate(User user);
2.UserMapper.xml
<mapper namespace="com.itxiaofei.dao.UserMapper">
<!--修改一个用户-->
<update id="upDate" parameterType="com.itxiaofei.pojo.User">
update mybatis.user set name=#{name},pwd=#{pwd} where id = #{id} ;
</update>
</mapper>
3.UserDaoTest
@Test
public void upDate(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
int date = mapper.upDate(new User(5, "小娟", "123456"));
if (date>0){
System.out.println("修改成功");
}
sqlSession.commit();
sqlSession.close();
}
5.delete(删除)
代码整理:
1.UserMapper
//delete(删除一个用户)
int delete(int id);
2.UserMapper.xml
<!--删除一个用户-->
<delete id="delete" parameterType="com.itxiaofei.pojo.User">
delete from mybatis.user where id=#{id}
</delete>
3.UserDaoTest
@Test
public void delete(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
int delete = mapper.delete(6);
if (delete>0){
System.out.println("删除成功");
}
sqlSession.commit();
sqlSession.close();
}
6.小结:增,删,该,需要提交事务sqlSession.commit();
7.错误总结:
报错:com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '4' for key 'PRIMARY’
仔细分析一下,原来就是是因为插入的新数据,与表的主键唯一约束产生了冲突,也就是新数据的主键在表中已经存在了,不能重复插入同样的数据!
- 标签不要匹配错误(UserMapper.xml中)
- 程序配置文件必须符合规范
- NullPointerException(空指针异常)没有注册到资源
8.万能的Map
假设,我们的实体类,或者数据库中的表,字段或者参数过多,我们应当考虑万能的Map
8.1.代码整理:
- UserMapper
//用Map实现增加用户
int addUser2(Map<String,Object>map);
//用Map实现修改用户
int upDate2(Map<String,Object>map);
- UserMapper.xml
<!--使用Map增加,野路子,很省事-->
<insert id="addUser2" parameterType="map">
insert into mybatis.user(id,name,pwd) value(#{user id},#{name2},#{password});
</insert>
<!--使用Map修改用户,使用map,类型名称可以自己定义,方便测试-->
<!--例子:name=#{username}或者name=#{username2}都可以-->
<update id="upDate2" parameterType="map">
update mybatis.user set name=#{username},pwd=#{password} where id = #{user id} ;
</update>
- UserDaoTest
//使用Map实现增加
@Test
public void addUser2(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
Map<String, Object> map = new HashMap<String, Object>();
map.put("user id",6);
map.put("password","123123");
int i = mapper.addUser2(map);
if (i>0){
System.out.println("增加成功");
}
sqlSession.commit();
sqlSession.close();
}
//使用Map实现修改
@Test
public void update2(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
Map<String, Object> map = new HashMap<String, Object>();
map.put("user id",6);
map.put("password","123456");
map.put("username","小包");
//int x(x可以随意取名)
int x = mapper.upDate2(map);
if (x>0){
System.out.println("修改成功");
}
**//声明事务(增删改必须声明事务!!)**
sqlSession.commit();
sqlSession.close();
}
8.2.Map总结:
Map传递参数,直接在sql中取出key即可
对象传递参数,直接在sql中取对象的属性即可
只有一个基本类型参数的情况下,可以直接在sql中取到
多个参数用Map,或者注解!
9.模糊查询怎么写
代码整理:
- UserMapper
//模糊查询
List<User> getUserLike(String value);
- UserMapper.xml
<!--模糊查询-->
<select id="getUserLike" resultType="com.itxiaofei.pojo.User">
select * from mybatis.user where name like #{value}
<!--select * from mybatis.user where name like "%"#{value}"%"-->
</select>
- UserDaoTest
//模糊查询
@Test
public void getUserLike(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> userList = mapper.getUserLike("%小%");
for (User user: userList){
System.out.println(user);
}
sqlSession.close();
}
模糊查询面向用户的两种查询方式(第二种较好,写死,安全)
1.java代码 执行的时候,传递通配符% %
List<User> userList = mapper.getUserLike("%小%");
2.在sql拼接中使用通配符!
<select id="getUserLike" resultType="com.itxiaofei.pojo.User">
select * from mybatis.user where name like "%"#{value}"%"
</select>
标签:mapper,int,UserMapper,CRUD,sqlSession,user,增删,改查,id
From: https://www.cnblogs.com/itxiaofei/p/16835175.html