- 1、namespace
- 2、select
- 3、insert
- 4、updata
- 5、delete
- 注意
- 6、分析错误
- 读错方式
- 7、万能的Map
- 添加用户
- 查看用户
- 8、模糊查询
- Java代码执行的时候,传递通配符% %
- 在sql拼接中使用通配符
增删改查实现
所有的 *** 作只跟接口和配置文件有关,
实体类和工具类不需要变
只需要修改接口、配置文件、测试类
1、namespacenamespace中的包名要和 Dao/mapper接口的包名一致!
2、select选择,查询语句
- id:对应的namespace中的方法名
- resultType:Sql语句执行的返回值!
- 返回值:类/基本数据类型,以类为准
- parameterType:参数的类型
步骤:
-
编写接口
-
//根据ID查询用户 User getUserById(int id);
-
-
编写对应的mapper中的sql语句
-
测试(增删改需要提交事务)
-
@Test public void getUserById(){ //获取执行sql的对象 SqlSession sqlSession = MybatisUtils.getSqlSession(); //获得接口 UserMapper mapper = sqlSession.getMapper(UserMapper.class); User user = mapper.getUserById(1); System.out.println(user); sqlSession.close(); }
-
//插入一个用户 int addUser(User user);
insert into user (id,name ,pwd) values (#{id},#{name},#{pwd});
@Test //增删改需要提交事务 public void addUser(){ //获取执行sql的对象 SqlSession sqlSession = MybatisUtils.getSqlSession(); //获得接口 UserMapper mapper = sqlSession.getMapper(UserMapper.class); //增加用户 int user = mapper.addUser(new User(4, "赵六", "123")); if (user > 0){ System.out.println("插入成功!"); } //提交事务 sqlSession.commit(); sqlSession.close(); }4、updata
//修改一个用户 int upDataUser(User user);
update user set id = #{id}, name = #{name}, pwd = #{pwd} where id = #{id};
//修改一个用户 @Test public void upDataUser(){ //获得执行sql的对象 SqlSession sqlSession = MybatisUtils.getSqlSession(); //得到接口 UserMapper mapper = sqlSession.getMapper(UserMapper.class); mapper.upDataUser(new User(3,"小明","123")); sqlSession.commit(); sqlSession.close(); }5、delete
//删除一个用户 int deleteUser(int id);
delete from user where id = #{id};
//删除一个用户 @Test public void deleteUser(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); mapper.deleteUser(4); sqlSession.commit(); sqlSession.close(); }注意
- 增删改,需要提交事务
- 标签不要匹配错误
- resource 绑定Mapper需要使用路径:/分开
- 程序配置文件必须符合规范
- 空指针异常:NullPointerException,没有注册到资源
- 不能这样定义
- 输出xml文件存在中文乱码问题!
- maven资源没有导出问题
7、万能的Map从下往上读,如:
假设,我们的实体类,或者数据库中的表,字段或者参数过多,我们应当考虑使用Map!
-
Map传递参数,直接在sql中取出key即可!
-
parameterType="map"
-
-
对象传递参数,直接在sql中取对象的属性即可!
-
parameterType="com.yin.pojo.User" //(对象)
-
-
只有一个基本类型参数的情况下,可以直接在sql中取到!
- 可以不写,基本参数类型
-
多个参数用Map,或者注解!
//万能的map 好处:不需要知道数据库中有什么,只需要查对应的字段 int addUser2(Mapmap);
insert into user (id, name, pwd) values (#{userid}, #{userName}, #{userWord});
//map @Test public void addUser2(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); Map查看用户map = new HashMap<>(); map.put("userid",6); map.put("userName","小花"); map.put("userWord",123); mapper.addUser2(map); //提交事务 sqlSession.commit(); sqlSession.close(); }
User getUserById2(Mapmap);
@Test public void getUserById2(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); Map8、模糊查询map = new HashMap<>(); map.put("id",1); map.put("name","张三"); User userById2 = mapper.getUserById2(map); System.out.println(userById2); sqlSession.close(); } ========================================== User{id=1, name='张三', pwd='123'}
模糊查询这么写?
在项目中遇到的问题,业务中遇到
Java代码执行的时候,传递通配符% %安全的
关键代码
ListuserLike = mapper.getUserLike("%小%");
代码实现
//模糊查询 ListgetUserLike(String value);
@Test public void getUserLike(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); List在sql拼接中使用通配符userLike = mapper.getUserLike("%小%"); for (User user : userLike) { System.out.println(user); } sqlSession.close(); } //输出 User{id=3, name='小明', pwd='123'} User{id=6, name='小花', pwd='123'}
不安全,会出现sql注入
select * from mybatis.user where name like "%"#{value}"%"
ListuserLike = mapper.getUserLike("小");
防止sql注入问题的方法
-
在这里写死,让用户能传递的只有一个稳定的值
-
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)