MyBatis映射文件概述、增删改查

3.MyBatis的映射文件概述

3.1 概述

在这里插入图片描述

3.2 在用户的映射配置文件中配置

resultType 属性:

​ 用于指定结果集的类型。

parameterType 属性:

​ 用于指定传入参数的类型。

sql 语句中使用#{}字符:

​ 它代表占位符,相当于原来 jdbc 部分所学的?,都是用于执行语句时替换实际的数据。 具体的数据是由#{}里面的内容决定的。

4.增删改查

1. 添加
user对象的值
参数类型 parameterType
<!--    插入数据-->
   <insert id="save" parameterType="cn.xiaozhi0802.bean.User">
        insert into user value (#{wxy_id},#{wxy_username},#{wxy_password})
    </insert>
@Test
    public void test3() throws IOException {
        //模拟User
        User user = new User();
        user.setWxy_username("tom");
        user.setWxy_password("abc");
        //获取核心配置文件
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        //获得session工厂对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        //获取session会话对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //执行操作
        int i = sqlSession.insert("userMapper.save", user);
        List<User> userList = sqlSession.selectList("userMapper.findAll");
         //mybatis执行更新操作 提交事务
        sqlSession.commit();
        //打印
        System.out.println(i);
        System.out.println(userList);
//      释放资源
        sqlSession.close();
    }

注意事项:
在这里插入图片描述

2. 修改
<!--    修改-->
    <update id="update" parameterType="cn.xiaozhi0802.bean.User">
        update user set wxy_username=#{wxy_username},wxy_password=#{wxy_password} where wxy_id=#{wxy_id}
    </update>
@Test
    public void test4() throws IOException {
        //模拟User
        User user = new User();
        user.setWxy_id(4);
        user.setWxy_username("tom2");
        user.setWxy_password("abc");
        //获取核心配置文件
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        //获得session工厂对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        //获取session会话对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //执行操作
        int i = sqlSession.update("userMapper.update", user);
        List<User> userList = sqlSession.selectList("userMapper.findAll");
        //mybatis执行更新操作 提交事务
        sqlSession.commit();
        //打印
        System.out.println(i);
        System.out.println(userList);
//      释放资源
        sqlSession.close();
    }

注意问题:

在这里插入图片描述

3. 删除
<!--    删除-->
    <delete id="delete" parameterType="java.lang.Integer">
        delete from user where wxy_id=#{id}
    </delete>
@Test
    public void test5() throws IOException {
        //获取核心配置文件
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        //获得session工厂对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        //获取session会话对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //执行操作
        sqlSession.delete("userMapper.delete",4);
        List<User> userList = sqlSession.selectList("userMapper.findAll");
        //mybatis执行更新操作 提交事务
        sqlSession.commit();
        //打印
        System.out.println(userList);
//      释放资源
        sqlSession.close();
    }

注意事项:

在这里插入图片描述

5. 新增用户 id 的返回值
//IUserDao.xml
<insert id="saveUser" parameterType="cn.xiaozhi0802.bean.Users">
        <!--查询保存之后的id值  keyProperty="id"对应Users的属性  keyColumn="id"对应数据库中的属性 order="AFTER"插入后执行-->
        <selectKey keyProperty="id" keyColumn="id"  resultType="Integer" order="AFTER">
            select last_insert_id()
        </selectKey>
        insert into user (username, password,name) values(#{username},#{password},#{name});
    </insert>
@Test
public void test2() throws IOException {
    Users user = new Users();
    user.setName("王麒");
    user.setPassword("root");
    user.setUsername("root");
    userDao.saveUser(user);
    System.out.println(user.getId());
}
//结果
0:16:53,612 DEBUG saveUser:143 - ==>  Preparing: insert into user (username, password,name) values(?,?,?); 
10:16:53,649 DEBUG saveUser:143 - ==> Parameters: root(String), root(String), 王麒(String)
10:16:53,732 DEBUG saveUser:143 - <==    Updates: 1
10:16:53,733 DEBUG saveUser!selectKey:143 - ==>  Preparing: select last_insert_id() 
10:16:53,733 DEBUG saveUser!selectKey:143 - ==> Parameters: 
10:16:53,867 DEBUG saveUser!selectKey:143 - <==      Total: 1
15
10:16:53,868 DEBUG JdbcTransaction:69 - Committing JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@776b83cc]
6. 用户模糊查询
//UserDao.java
	/**
     * 根据姓名模糊查询
     * @param name
     * @return
     */
	List<Users> findByNames(String name);
<!-- UserDao.xml-->
<!--根据姓名模糊查询-->
    <select id="findByNames" parameterType="string" resultType="cn.xiaozhi0802.bean.Users">
        select * from user where name like #{name}
    </select>
// 测试
@Test
public void test6() throws IOException {
    List<Users> names = userDao.findByNames("%王%");
    for (Users u : names) {
        System.out.println(u);
    }
}

6. Mybatis 与 JDBC 编程的比较

  1. 数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。 解决: 在 SqlMapConfig.xml 中配置数据链接池,使用连接池管理数据库链接。

  2. Sql 语句写在代码中造成代码不易维护,实际应用 sql 变化的可能较大,sql 变动需要改变 java 代码。 解决: 将 Sql 语句配置在 XXXXmapper.xml 文件中与 java 代码分离。

  3. 向 sql 语句传参数麻烦,因为 sql 语句的 where 条件不一定,可能多也可能少,占位符需要和参数对应。 解决: Mybatis 自动将 java 对象映射至 sql 语句,通过 statement 中的 parameterType 定义输入参数的 类型。

  4. 对结果集解析麻烦,sql 变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成 pojo 对 象解析比较方便。 解决: Mybatis 自动将 sql 执行结果映射至 java 对象,通过 statement 中的 resultType 定义输出结果的 类型。

7.MyBatis核心配置文件概述

MyBatis核心配置文件的层级关系

在这里插入图片描述

1 environments标签

在这里插入图片描述

2 mappers标签

在这里插入图片描述

<mapper resource=" " />
使用相对于类路径的资源
如:<mapper resource="cn/xiaozhi/dao/IUserDao.xml" />

<mapper class=" " />
使用 mapper 接口类路径
如:<mapper class="com.itheima.dao.UserDao"/>
注意:此种方法要求 mapper 接口名称和 mapper 映射文件名称相同,且放在同一个目录中。 

<package name=""/>
注册指定包下的所有 mapper 接口
如:<package name="cn.itcast.mybatis.mapper"/>
注意:此种方法要求 mapper 接口名称和 mapper 映射文件名称相同,且放在同一个目录中。
3 Properties标签

在这里插入图片描述

<!--    通过properties标签加载外部properties文件-->
    <properties resource="jdbc.properties"></properties>
<!--   数据源的环境 -->
    <environments default="developement">
        <environment id="developement">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
4 typeAliases标签

在这里插入图片描述

<!--    定义别名-->
<typeAliases>
    <typeAlias type="cn.xiaozhi0802.bean.User" alias="user"></typeAlias>
</typeAliases>

<!--在 SqlMapConfig.xml 中配置:-->
<typeAliases>
<!-- 单个别名定义 -->
<typeAlias alias="user" type="com.itheima.domain.User"/>
<!-- 批量别名定义,扫描整个包下的类,别名为类名(首字母大写或小写都可以) -->
<package name="com.itheima.domain"/>
<package name="其它包"/>
</typeAliases>

总结

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值