zoukankan      html  css  js  c++  java
  • Mybatis基础配置

    Mybatis基础配置

    生命周期和作用域

    SqlSessionFactoryBuilder :

    ​ 一旦创建了SqlSessionFactory, 就不再需要了,设置成局部变量

    SqlSessionFactory :

    ​ 想象成数据库连接池, 一旦创建就应该一直存在, 没有理由重新建造一个, 设置为全局作用域.

    ​ 使用单例模式或者静态单例模式, 既可以保证只有一份, 又是全局作用域

    SqlSession :

    • 连接到连接池的一个请求
    • SqlSession的实例不是线程安全的, 因此是不能被共享的, 所以它的最佳作用域是请求或方法作用域
    • 用完之后需要赶紧关闭, 否则资源被占用, 这个操作十分重要!!!

    编写mybatis核心配置文件

    1. pom.xml

         <!--防止报错用的-->
      	<build>
              <resources>
                  <resource>
                      <directory>src/main/resources</directory>
                      <includes>
                          <include>**/*.properties</include>
                          <include>**/*.xml</include>
                      </includes>
                      <filtering>true</filtering>
                  </resource>
                  <resource>
                      <directory>src/main/java</directory>
                      <includes>
                          <include>**/*.properties</include>
                          <include>**/*.xml</include>
                      </includes>
                      <filtering>true</filtering>
                  </resource>
              </resources>
          </build>
      
    2. mybatis-config.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>
      
          <!--每一个xml的作用是等地位的,但是由于这个xml通过标签引入了别的xml,
          就相当于这是个主xml的意味了,同时需要注意的是xml文件中各个标签的位置非常重要,否则会报错-->
      
          <!--引入外部配置文件,由于在一个包下,所以不用去写路径,
          相当于把测试一中的value专门写到一个地方去,并且外部配置的优先级更高-->
          <properties resource="config.properties"/>
      
          <!--取别名-->
          <typeAliases>
              <!--当类名比较少的时候,分别给每一个类取上别名-->
              <typeAlias type="com.xiong.pojo.User" alias="User"/>
              <!--当类名比较多的时候,通过引入包,使得自动扫描对应包下类,
              这种默认不可以自定义别名,除非再额外使用@Alias的注解-->
              <package name="com.xiong.pojo"/>
          </typeAliases>
          <!-- 对数据库连接的配置文件 -->
          <environments default="development2">
      
              <!--测试一-->
              <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/mybatis?useUnicode=true&amp;characterEncoding=UTF-8&amp;useJDBCCompliantTimezoneShift=true&amp;useLegacyDatetimeCode=false&amp;serverTimezone=UTC"/>
                      <property name="username" value="root"/>
                      <property name="password" value="123456"/>
                  </dataSource>
              </environment>
      
      
              <!--测试二-->
              <environment id="development2">
                  <transactionManager type="JDBC"/>
                  <dataSource type="POOLED">
                      <property name="driver" value="${driver}"/>
                      <property name="url" value="${url}"/>
                      <property name="username" value="${username}"/>
                      <property name="password" value="${password}"/>
                  </dataSource>
              </environment>
          </environments>
      
          <!-- mapper.xml文件的路径配置 -->
          <mappers>
              <mapper resource="com/xiong/dao/UserMapper.xml"/>
          </mappers>
      </configuration>
      
    3. mapper.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">
      
      <!--用配置文件的方式来取代接口的实现类-->
      <!--使用别名来减少完全限定名的冗余,别名在mybatis-config.xml中设置-->
      
      <!--绑定对应的接口-->
      <mapper namespace="com.xiong.dao.UserMapper">
          <!--这里已经使用了别名进行优化-->
          <insert id="addUser" parameterType="User">
      -- 在这里对象的属性可以直接用,直接写User类中的id,name和pwd,这里需要与属性名相对应
              insert into mybatis.user(id, name, pwd) value (#{id},#{name},#{pwd})
          </insert>
          <!--使用map自定义程度高,可以不用User类对象中的属性-->
          <insert id="addUserSimple" parameterType="map">
              insert into user (id, name, pwd) values (#{userId},#{username},#{password});
          </insert>
          <update id="updateUser" parameterType="User">
              update mybatis.user set name = #{name},pwd=#{pwd} where id=#{id} ;
          </update>
          <delete id="deleteUser" parameterType="int">
              delete from mybatis.user where id=#{id};
          </delete>
          <!--id就是对应的方法名,相当于用下面的sql语句重写了该方法
              resultType是sql语句的返回值
              parameterType是对应的参数类型-->
          <select id="getUserList" resultType="User">
              select * from mybatis.user
          </select>
          <select id="getUserById" resultType="User" parameterType="int">
              select * from mybatis.user where id = #{id}
          </select>
          <select id="getUserLike" resultType="User">
      -- 模糊查询的sql,拼接的时候需要防止sql注入
              select * from mybatis.user where name like #{value}
          </select>
      </mapper>
      

    编写mybatis工具类

    public class MybatisUtils {
    
        //提升作用域
        private static SqlSessionFactory sqlSessionFactory;
    
        static {
            //使用Mybatis第一步,获取sqlSessionFactory
            //固定代码
            InputStream inputStream = null;
            try {
                String resource = "mybatis-config.xml";
                inputStream = Resources.getResourceAsStream(resource);
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
    // 既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。
    // org.apache.ibatis.session.SqlSession 提供了在数据库执行 org.apache.ibatis.jdbc.SQL 命令所需的所有方法。
    // 你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。例如:
        public static SqlSession getSqlSession(){
            return sqlSessionFactory.openSession();
        }
    }
    
  • 相关阅读:
    Django虚拟环境创建问题virtualenvwrapper.sh: There was a problem running the initialization hooks.
    面向对象
    使用python中ssh连接CentOS7上的数据库
    Mysql在python中的使用:pymysql
    Mysql索引原理
    Mysql数据记录操作
    Mysql完整性约束
    Mysql支持的数据类型
    Mysql账户设置_增删改查_表操作
    自己项目列表
  • 原文地址:https://www.cnblogs.com/yimeisuren/p/12640077.html
Copyright © 2011-2022 走看看