首页 > 其他分享 >MyBatis-02CRUD操作及配置解析01

MyBatis-02CRUD操作及配置解析01

时间:2023-05-07 11:32:42浏览次数:39  
标签:mapper 01 02CRUD UserMapper session user MyBatis id select

上集回顾: 第一个程序

namespace

  1. 将上面案例中的UserMapper接口改名为 UserDao;
  2. 将UserMapper.xml中的namespace改为为UserDao的路径 .
  3. 再次测试

结论:

配置文件中namespace中的名称为对应Mapper接口或者Dao接口的完整包名,必须一致!

1 CRUD操作及配置解析

1.1 select

  • select标签是mybatis中最常用的标签之一

  • select语句有很多属性可以详细配置每一条SQL语句

    • SQL语句返回值类型。【完整的类名或者别名】

    • 传入SQL语句的参数类型 。【万能的Map,可以多尝试使用】

    • 命名空间中唯一的标识符

    • 接口中的方法名与映射文件中的SQL语句ID 一一对应

    • id

    • parameterType

    • resultType

1.1.1 需求:根据id查询用户

1、在UserMapper中添加对应方法

public interface UserMapper {
   //查询全部用户
   List<User> selectUser();
   //根据id查询用户
   User selectUserById(int id);
}

2、在UserMapper.xml中添加Select语句

<select id="selectUserById" resultType="com.kuang.pojo.User">
select * from user where id = #{id}
</select>

3、测试类中测试

@Test
public void tsetSelectUserById() {
   SqlSession session = MybatisUtils.getSession();  //获取SqlSession连接
   UserMapper mapper = session.getMapper(UserMapper.class);
   User user = mapper.selectUserById(1);
   System.out.println(user);
   session.close();
}

1.1.2 课堂练习:根据 密码 和 名字 查询用户

思路一:直接在方法中传递参数

1、在接口方法的参数前加 @Param属性
2、Sql语句编写的时候,直接取@Param中设置的值即可,不需要单独设置参数类型
//通过密码和名字查询用户
User selectUserByNP(@Param("username") String username,@Param("pwd") String pwd);

/*
   <select id="selectUserByNP" resultType="com.kuang.pojo.User">
     select * from user where name = #{username} and pwd = #{pwd}
   </select>
*/

思路二:使用万能的Map

1、在接口方法中,参数直接传递Map;
User selectUserByNP2(Map<String,Object> map);
2、编写sql语句的时候,需要传递参数类型,参数类型为map
<select id="selectUserByNP2" parameterType="map" resultType="com.kuang.pojo.User">
select * from user where name = #{username} and pwd = #{pwd}
</select>
3、在使用方法的时候,Map的 key 为 sql中取的值即可,没有顺序要求!
Map<String, Object> map = new HashMap<String, Object>();
map.put("username","小明");
map.put("pwd","123456");
User user = mapper.selectUserByNP2(map);

总结:如果参数过多,我们可以考虑直接使用Map实现,如果参数比较少,直接传递参数即可

1.2 insert

我们一般使用insert标签进行插入操作,它的配置和select标签差不多!

需求:给数据库增加一个用户

1、在UserMapper接口中添加对应的方法

//添加一个用户
int addUser(User user);

2、在UserMapper.xml中添加insert语句

<insert id="addUser" parameterType="com.kuang.pojo.User">
    insert into user (id,name,pwd) values (#{id},#{name},#{pwd})
</insert>

3、测试

@Test
public void testAddUser() {
   SqlSession session = MybatisUtils.getSession();
   UserMapper mapper = session.getMapper(UserMapper.class);
   User user = new User(5,"王五","zxcvbn");
   int i = mapper.addUser(user);
   System.out.println(i);
   session.commit(); //提交事务,重点!不写的话不会提交到数据库
   session.close();
}

注意点:增、删、改操作需要提交事务!

** **

1.3 update

我们一般使用update标签进行更新操作,它的配置和select标签差不多!

需求:修改用户的信息

1、编写接口方法

//修改一个用户
int updateUser(User user);

2、编写对应的配置文件SQL

<update id="updateUser" parameterType="com.kuang.pojo.User">
  update user set name=#{name},pwd=#{pwd} where id = #{id}
</update>

3、测试

@Test
public void testUpdateUser() {
   SqlSession session = MybatisUtils.getSession();
   UserMapper mapper = session.getMapper(UserMapper.class);
   User user = mapper.selectUserById(1);
   user.setPwd("asdfgh");
   int i = mapper.updateUser(user);
   System.out.println(i);
   session.commit(); //提交事务,重点!不写的话不会提交到数据库
   session.close();
}

1.3 delete

我们一般使用delete标签进行删除操作,它的配置和select标签差不多!

需求:根据id删除一个用户

1、同理,编写接口方法

//根据id删除用户
int deleteUser(int id);

2、编写对应的配置文件SQL

<delete id="deleteUser" parameterType="int">
  delete from user where id = #{id}
</delete>

3、测试

@Test
public void testDeleteUser() {
   SqlSession session = MybatisUtils.getSession();
   UserMapper mapper = session.getMapper(UserMapper.class);
   int i = mapper.deleteUser(5);
   System.out.println(i);
   session.commit(); //提交事务,重点!不写的话不会提交到数据库
   session.close();
}

小结:

  • 所有的增删改操作都需要提交事务!
  • 接口所有的普通参数,尽量都写上@Param参数,尤其是多个参数时,必须写上!
  • 有时候根据业务的需求,可以考虑使用map传递参数!
  • 为了规范操作,在SQL的配置文件中,我们尽量将Parameter参数和resultType都写上!

思考题

模糊查询like语句该怎么写?

第1种:在Java代码中添加sql通配符。

string wildcardname = “%smi%”;
list<name> names = mapper.selectlike(wildcardname);

<select id=”selectlike”>
select * from foo where bar like #{value}
</select>

第2种:在sql语句中拼接通配符,会引起sql注入

string wildcardname = “smi”;
list<name> names = mapper.selectlike(wildcardname);

<select id=”selectlike”>
    select * from foo where bar like "%"#{value}"%"
</select>

标签:mapper,01,02CRUD,UserMapper,session,user,MyBatis,id,select
From: https://blog.51cto.com/u_16079786/6251816

相关文章

  • Web自动化测试-01
    一、什么是Web自动化测试?让程序代替人工,去验证网页上功能的过程。Web自动化执行的测试用例是手工测试的子集,其优点是测试效率高,缺点是不具备发人的散性思维。二、什么场景适合做Web自动化测试?进行Web自动化测试的前提是,没有频繁的需求变更,且程序版本稳定。在冒烟测试和回归测试......
  • sprint 第一个例子-User类创建-01
     packagecom.sz.model;publicclassUser{privateStringname;privateintAge;publicvoidsetAge(intage){this.Age=age;}publicintgetAge(){returnAge;}publicvoidsetName(Stringname){thi......
  • NC20545 [HEOI2012]采花
    题目链接题目题目描述萧芸斓是Z国的公主,平时的一大爱好是采花。今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花。花园足够大,容纳了\(n\)朵花,花有\(c\)种颜色(用整数\(1-c\)表示),且花是排成一排的,以便于公主采花。公主每次采花后会统计采到的花的颜色数,颜色数......
  • k01_idea解决超过三十天无法登录问题
    idea过期问题当IDEA过期了无法进入程序的时候我们大可不必卸载重新安装只需要删除指定文件即可!1、寻找目录如:C:\Users\zhangsan(您的主机目录)\AppData\Roaming\JetBrains\IntelliJIdea2020.1\eval2、删除文件删除指定的那个文件即可!对于不同的idea版本号会不同!根据实际情况删......
  • P8655 [蓝桥杯 2017 国 B] 发现环 题解
    题目概述题目传送门在一棵树中新增一条边,使得这个图产生一个环,求在环上的点。思路:拓补排序对于这道题显然不能生搬硬套拓补排序的模板。这道题中的图是一个无向图,而拓补排序却是处理有向图的一种思想。不难想到可以将无向图转化为有向图,即将对于每条无向边变换为双向建边,就......
  • Mybatis设计模式
    创建型建造者模式,工厂模式我们在单独Mybatis框架执行SQL语句的时候,需要获得SqlSession实例来直接执行已映射的SQL语句,在获得SqlSession实例的过程中,就使用了建造者模式和工厂模式。我们来看看一下调用过程:1Stringresource="org/mybatis/example/mybatis-config.xml";2......
  • 01 磁盘分区创建删除及逻辑卷挂载
    磁盘分区删除、创建及逻辑卷挂载磁盘分区查看使用lsblk命令查看当前磁盘分区情况[root@localhost~]#lsblkNAMEMAJ:MINRMSIZEROTYPEMOUNTPOINTSsda8:00447.1G0disk└─sda18:10447.1G0partsdb8:160......
  • sql注入原理和mybatis解决sql注入
    转载:https://www.bilibili.com/video/BV1ZR4y1Y745/?spm_id_from=333.880.my_history.page.click&vd_source=46d50b5d646b50dcb2a208d3946b1598https://juejin.cn/post/7064740474057146398#heading-11......
  • WEB|[BSidesCF 2019]Futurella
    页面英文提示:阻止外星人!我们在垃圾箱里发现了这张纸条。我们认为它来自入侵的外星人!你能读一下吗?使用翻译可以翻译部份内容,也没发现什么规律查看源码发现flagflag{ddc88d97-0505-4a91-b442-e7bd74b02358}最后还发现,直接将所有内容复制到其他地方会看到原本文字Resistance......
  • ex2010安装部署
    本文描述的是在WindowsServer2008R2上面安装ex2010_sp3。目录目录1、安装系统必备组件2、安装ExchangeServer2010SP33、启用OutlookAnywhere功能1、安装系统必备组件先安装如下2个补丁+.net3.5SP1:添加【应用程序服务器】角色,如下图所示:同时以后如果要启用Outloo......