MyBatis映射文件UserMapper.xml(mysql环境)

MyBatis的强项在于其对SQL的映射,减少了大量JDBC代码。本文介绍了UserMapper.xml中的核心元素,如select、insert、update、delete、sql、resultMap和cache,并详细讲解了mapper配置、resultMap映射、增删改查语句的使用。
摘要由CSDN通过智能技术生成

引言

Mybatis的真正强大,在于她对SQL的映射,这也是她吸引人的地方。实现相同的功能,她要比直接使用JDBC省去95%的代码量。而且将SQL语句独立在Java代码之外,为程序的修改和纠错提供了更大的灵活性,可以直接修改SQL语句,而无需重新编译Java程序。

SQL映射文件也是XML格式,其顶级元素有以下几个:

 

  • select - 映射sql查询语句
  • insert - 映射sql插入语句
  • update - 映射sql更新语句
  • delete - 映射sql删除语句
  • sql - 就像程序中可以复用的函数一样,这个元素下放置可以被其他语句重复引用的sql语句
  • resultMap - 用来描述如何从数据库查询结果集中来加载对象
  • cache - 给定命名空间的缓存配置
  • cache-ref - 其他命名空间缓存配置引用

1.mapper配置xml文件和接口关联。

1 <!--namespace务必和接口的全类名一致 -->
2 <mapper namespace="cn.bdqn.li.UserMapper">

 

2.resultMap映射。存在条件:当数据库字段名和实体类中的属性名不同的情况下。

1 <!--字段名和属性名不同时,使用resultMap映射-->
2     <resultMap id="userMap" type="User">
3         <id property="id" column="xsdm"/>
4         <result property="name" column="xsmc"/>
5     </resultMap>

3.insert into 添加语句(带主键回写)

<!--id务必和接口中的方法名称对应
    如果参数类型是一个对象,那么sql语句中#{对象的属性名}
         KeyProperty属性表示:   数据表主键对应的实体对象属性名称
         parameterType:要执行的dao中的方法的参数,如果是类的话,必须使用全路径类
        (全路径名可以使用在mybatis.xml文件中配置的别名代替)
-->
<!--新增用户的同时 拿到数据库中的id
 01.完成新增操作之后并没有把连接还给连接池
 02.而是接着使用连接去查询id
 SELECT @@IDENTITY
 SELECT LAST_INSERT_ID()   都可以获取刚刚插入数据的主键

  mysql中使用 order="AFTER", 主键自增,必须是插入数据成功之后才能获取id
  oracle中使用 order="BEFORE" ,必须先从序列中获取id,才能新增!

  useGeneratedKeys:  mybatis会根据数据库的不同获取主键===》 主键回填
 -->


    <insert id="addUser" parameterType="User"  keyProperty="id" useGeneratedKeys="true">
        insert into xs(xsmc)
        values(#{name})
         <!-- 回显,添加数据后,返回对象的id值 -->
        <selectKey resultType="int" keyProperty="id" order="AFTER">
            select @@IDENTITY
        </selectKey>
    </insert>

4.查询语句

  

  1  <!--查询指定的user对象
  2             当数据库中的字段和实体类中的属性名相同时,使用resultType=“实体类名”。
  3         -->
  4     <select id="selectUserById" parameterType="int" resultType="User">
  5         SELECT  xsmc  from xs  where xsdm=#{id}
  6   
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是对应的代码: 1. 数据准备 首先需要有一个数据库,假设我们创建了一个名为`test`的数据库,其中有一张名为`user`的表,表结构如下: ``` CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(20) NOT NULL, `age` int(11) NOT NULL, `gender` varchar(10) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ``` 然后插入一些测试数据: ``` INSERT INTO `user` (`id`, `name`, `age`, `gender`) VALUES (1, '张三', 18, '男'); INSERT INTO `user` (`id`, `name`, `age`, `gender`) VALUES (2, '李四', 20, '女'); INSERT INTO `user` (`id`, `name`, `age`, `gender`) VALUES (3, '王五', 22, '男'); ``` 2. 创建POJO实体 创建一个名为`User`的Java类,表示`user`表对应的实体类,代码如下: ``` public class User { private Integer id; private String name; private Integer age; private String gender; // 省略 getter 和 setter 方法 } ``` 3. 创建映射文件UserMapper.xml 在 resource 目录下创建一个名为`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.example.mapper.UserMapper"> <select id="getUserById" parameterType="java.lang.Integer" resultType="com.example.pojo.User"> SELECT * FROM user WHERE id = #{id} </select> </mapper> ``` 上述代码定义了一个名为`getUserById`的查询语句,参数类型为`java.lang.Integer`,结果类型为`com.example.pojo.User`,实现根据id查询用户信息的操作。 4. 修改mybatis-confg.xml配置文件 在 resource 目录下的`mybatis-confg.xml`文件中添加如下配置: ``` <configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/test?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC"/> <property name="username" value="root"/> <property name="password" value="root"/> </dataSource> </environment> </environments> <mappers> <mapper resource="com/example/mapper/UserMapper.xml"/> </mappers> </configuration> ``` 其中`<dataSource>`标签中的`url`、`username`和`password`属性需要根据实际情况修改。 5. 编写测试类 在测试类中使用`SqlSessionFactory`、`SqlSession`和`UserMapper`来查询用户信息,代码如下: ``` public class MybatisTest { public static void main(String[] args) { SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("mybatis-config.xml")); try (SqlSession session = sessionFactory.openSession()) { UserMapper userMapper = session.getMapper(UserMapper.class); User user = userMapper.getUserById(1); System.out.println(user); } catch (IOException e) { e.printStackTrace(); } } } ``` 上述代码通过`SqlSessionFactoryBuilder`来创建`SqlSessionFactory`,然后通过`SqlSession`来获取`UserMapper`实例,在`UserMapper`实例中调用`getUserById`方法来查询用户信息。最后输出查询结果。 希望以上代码能够帮到你。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值