• Mybatis 是什么?有什么用?
  • 如何使用

Mybatis 是什么?有什么用?

  • mybatis是一个优秀的基于java的持久层框架,它内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程
  • mybatis通过xml或注解的方式将要执行的各种 statement配置起来,并通过java对象和statement中sql的动态参数进行映射生成最终执行的sql语句
  • 最后mybatis框架执行sql并将结果映射为java对象并返回。采用ORM思想解决了实体和数据库映射的问题,对jdbc进行了封装,屏蔽了jdbcapi底层访问细节,使我们不用与jdbcapi打交道,就可以完成对数据库的持久化操作。

  • 个人小结

    • 最主要是实现3个作用
      • 提供池化的链接
      • sql语句和代码解耦
      • 实现实体(属性)和表(字段)的自动映射
    • 可以这么理解通过JAVA对象,隐射sql语句中的输入参数,返回结果….

如何使用

  • 至少:两个(类)配置文件
    • MyBatis核心配置文件
    • 映射文件
  • 步骤总结
    • ①添加MyBatis的坐标
    • ②创建user数据表
    • ③编写User实体类
    • ④编写映射文件UserMapper.xml
    • ⑤编写核心文件SqlMapConfig.xml
    • ⑥编写测试类
      • image.png ```java package com.jquan.test;

import com.jquan.domain.User; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.Test;

import java.io.IOException; import java.io.InputStream; import java.util.List;

public class MyBatisTest {

  1. @Test
  2. public void test5() throws IOException {
  3. /*获得核心配置文件*/
  4. InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
  5. /*获得session工厂对象*/
  6. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
  7. /*获得session对话对象*/
  8. SqlSession sqlSession = sqlSessionFactory.openSession();
  9. User user = new User();
  10. user.setUsername("lisi");
  11. user.setPassword("123456");
  12. user.setId(2);
  13. /*执行操作:参数(namespace+id)*/
  14. sqlSession.update("userMapper.update",user);
  15. sqlSession.close();
  16. }
  17. @Test
  18. public void test4() throws IOException {
  19. /*获得核心配置文件*/
  20. InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
  21. /*获得session工厂对象*/
  22. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
  23. /*获得session对话对象*/
  24. SqlSession sqlSession = sqlSessionFactory.openSession();
  25. /*执行操作:参数(namespace+id)*/
  26. sqlSession.delete("userMapper.delete",0);
  27. sqlSession.close();
  28. }
  29. @Test
  30. public void test3() throws IOException {
  31. /*获得核心配置文件*/
  32. InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
  33. /*获得session工厂对象*/
  34. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
  35. /*获得session对话对象*/
  36. SqlSession sqlSession = sqlSessionFactory.openSession();
  37. User user = new User();
  38. user.setUsername("ali");
  39. user.setPassword("123");
  40. /*执行操作:参数(namespace+id)*/
  41. sqlSession.insert("userMapper.saveUser",user);
  42. sqlSession.close();
  43. }
  44. @Test
  45. public void test2() throws IOException {
  46. /*获得核心配置文件*/
  47. InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
  48. /*获得session工厂对象*/
  49. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
  50. /*获得session对话对象*/
  51. SqlSession sqlSession = sqlSessionFactory.openSession();
  52. /*执行操作:参数(namespace+id)*/
  53. List<User> userList = sqlSession.selectOne("userMapper.findById",1);
  54. System.out.println(userList);
  55. sqlSession.close();
  56. }
  57. @Test
  58. public void test1() throws IOException {
  59. /*获得核心配置文件*/
  60. InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
  61. System.out.println("resourceAsStream: "+resourceAsStream);
  62. /*获得session工厂对象*/
  63. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
  64. System.out.println("sqlSessionFactory: "+sqlSessionFactory);
  65. /*获得session对话对象*/
  66. SqlSession sqlSession = sqlSessionFactory.openSession();
  67. /*执行操作:参数(namespace+id)*/
  68. List<User> userList = sqlSession.selectList("userMapper.findAll");
  69. System.out.println(userList);
  70. sqlSession.close();
  71. }

}



- 核心配置文件
   - environments
   - ![image.png](https://cdn.nlark.com/yuque/0/2021/png/22442214/1635058285466-95fad848-3530-4d56-b03f-e157c705f5f7.png#clientId=u24a1873a-4763-4&from=paste&height=229&id=uad78e9fb&margin=%5Bobject%20Object%5D&name=image.png&originHeight=458&originWidth=1011&originalType=binary&ratio=1&size=61177&status=done&style=none&taskId=uc00929a1-e395-4d5f-9a93-782013f9edd&width=505.5)
   - 常用标签:propertites,typeAliases,mappers

- 映射文件
   - ![image.png](https://cdn.nlark.com/yuque/0/2021/png/22442214/1635057959504-fc00d1ad-3d8b-4207-827c-3afee5a40505.png#clientId=u24a1873a-4763-4&from=paste&height=250&id=u295c965a&margin=%5Bobject%20Object%5D&name=image.png&originHeight=499&originWidth=1176&originalType=binary&ratio=1&size=65078&status=done&style=none&taskId=uac61b453-c319-444d-9ab9-bdc4cf789c6&width=588)

- 注意事项
   - •插入更新删除操作涉及数据库数据变化,所以要使用sqlSession对象显示的提交事务,即sqlSession.commit() 
   - •Sql语句中使用#{实体属性名}方式引用实体中的属性值
   -  parameterType , resultType

- 两个配置文件
```xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

    <!--加载外部文件-->
    <properties resource="jdbc.properties"></properties>

    <!--自定义别名-->
    <typeAliases>
        <typeAlias type="com.jquan.domain.User" alias="user"/>
    </typeAliases>

    <!--数据源环境-->
    <environments default="development">
        <environment id="development">
            <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>

    <!--加载映射文件-->
    <mappers>
        <!--!!!写路径时,最好用 copy ~-->
        <!--下面这个,用com/jquan/mapper/UserMapper.xml 是不对的,虽然参考资料是这么写,坑-->
        <mapper resource="com.jquan.mapper\UserMapper.xml"/>
    </mappers>
</configuration>
<?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="userMapper">

    <!--查询全部-->
    <select id="findAll" resultType="com.jquan.domain.User">
        select * from user
    </select>
    <!--根据id查询-->
    <select id="findById" resultType="user" parameterType="int">
        select * from user where id=#{id}
    </select>

    <!--插入-->
    <insert id="saveUser"  parameterType="user">
        insert into user values (#{id},#{username},#{password});
    </insert>

    <!--删除-->
    <delete id="delete"  parameterType="int">
        delete from user where id=#{id};
    </delete>

    <!--修改操作-->
    <update id="update"  parameterType="user">
        update user set username=#{username},password=#{password} where id = #{id}
    </update>


</mapper>
  • 导入坐标 ```xml <?xml version=”1.0” encoding=”UTF-8”?> <project xmlns=”http://maven.apache.org/POM/4.0.0

       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    
    ssmd1 com.jquan 1.0-SNAPSHOT

    4.0.0

    ssmMybatisQuick

    war

    org.mybatis mybatis 3.4.6 mysql mysql-connector-java 5.1.32 junit junit 4.12 log4j log4j 1.2.12

```