MyBatis - 1 - Helloworld(快速搭建 MyBatis+maven) 、歸檔


快速搭建 MyBatis

在這裏插入圖片描述

  1. Maven

     <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version> RELEASE</version>
            </dependency>
    
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.2.8</version>
            </dependency>
         <!--日誌約束-->
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
                <version> RELEASE</version>
            </dependency>
    
  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>
        <!--配置別名-->
        <typeAliases>
            <package name="com.sf.wj.domain"/>
        </typeAliases>
        <!--數據源配置-->
        <environments default="development">
            <environment id="development">
                <transactionManager type="JDBC"></transactionManager>
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql://localhost:3306/company?serverTimezone=UTC"/>
                    <property name="username" value="root"/>
                    <property name="password" value="123456"/>
                </dataSource>
            </environment>
        </environments>
        
        <!--資源引用-->
        <mappers>
            <mapper resource="mappers/UserMapper.xml"/>
        </mappers>
    
    </configuration>
    
  3. 【測試類 - 部分】根據 xml 配置文件(全局配置文件) 創建一個 SqlSessionFactory 對象

    package com.sf.wj;
    
    import com.sf.wj.domain.User;
    import com.sf.wj.mapper.UserMapper;
    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.After;
    import org.junit.Before;
    import org.junit.Test;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.List;
    
    public class UserTest {
        private UserMapper mapper;
        private SqlSession sqlSession;
        private InputStream inputStream;
        @Before
        public void setUp() throws IOException {
            String rusource = "mybatis-config.xml";
             inputStream = Resources.getResourceAsStream(rusource);
            SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
            //默認傳入參數false,不自動提交
            sqlSession = factory.openSession(false); // 2、獲取sqlSession實例,能直接執行已經映射的 sql 語句
            mapper = sqlSession.getMapper(UserMapper.class);
        }
    
       
    
  4. 創建 mapper 映射

    <?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.sf.wj.mapper.UserMapper"><!-- namespace:名稱空間 -->
        <select id="queryById" parameterType="int" resultType="User"><!--id:唯一表示、resultType:返回值類型-->
            select * from user where id = #{id}<!--#{id}接口從傳遞過來的參數-->
        </select>
    
        <delete id="deleteById" parameterType="Integer" >
            delete from user where id = #{id}
        </delete>
    
        <select id="queryAll" resultType="User">
            select * from user
        </select>
    
        <update id="updateUser" parameterType="User">
            update user set username = #{username},password = #{password} where id=#{id}
        </update>
    
        <insert id="insertUser" parameterType="User">
            insert into user (id,username,password) values (#{id},#{username},#{password})
        </insert>
      
      <!--按多個id查找用戶 foreach-->
      <select id="queryByIds" resultType="User">
          select * from user where id in
          <foreach collection="array" open="(" close=")" separator="," item="id">
            #{id}
          </foreach>
      </select>
    </mapper>
    
  5. 創建 mapper 接口

    package com.sf.wj.mapper;
    
    import com.sf.wj.domain.User;
    
    import java.util.List;
    
    public interface UserMapper {
        User queryById(int id);
        void deleteById(int id);
        List<User> queryAll();
        void  updateUser(User user);
        void insertUser(User user);
        List<User> queryByIds(int[] ids);
    }
    
    
  6. 補完測試類

    package com.sf.wj;
    
    import com.sf.wj.domain.User;
    import com.sf.wj.mapper.UserMapper;
    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.After;
    import org.junit.Before;
    import org.junit.Test;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.List;
    
    public class UserTest {
        private UserMapper mapper;
        private SqlSession sqlSession;
        private InputStream inputStream;
        @Before
        public void setUp() throws IOException {
            String rusource = "mybatis-config.xml";
             inputStream = Resources.getResourceAsStream(rusource);
            SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
            //默認傳入參數false,不自動提交
            sqlSession = factory.openSession(false); // 2、獲取sqlSession實例,能直接執行已經映射的 sql 語句
            mapper = sqlSession.getMapper(UserMapper.class);
        }
    
        @After
        public void commit(){
            try {
                sqlSession.commit();
                inputStream.close();
                sqlSession.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        @Test
        public void queryByIdTest(){
            User user = mapper.queryById(1);
            System.out.println(user);
        }
        @Test
        public void queryAllTest(){
            List<User> user = mapper.queryAll();
            System.out.println(user);
        }
        @Test
        public void deleteTest(){
            mapper.deleteById(1);
        }
        @Test
        public void updateTest(){
            User user=new User();
            user.setId(1);
            user.setPassword("qwert");
            user.setUsername("jg");
            mapper.updateUser(user);
        }
    
        @Test
        public void insertTest(){
            User user=new User();
            user.setId(3);
            user.setPassword("369");
            user.setUsername("zs");
            mapper.insertUser(user);
        }
    
      //多個id查找
      @Test
      public void queryByIdsTest(){
          List<User> list = mapper.queryByIds(new int[]{1, 2, 3});
          System.out.println(list);
      }
    }
    

技術對比

# JDBC工具?Hibernate?

JDBC工具(Dbutils、jdbcTemplate…)缺點

  • sql語句在java 代碼裏面,硬編碼,高耦合
  • 缺少整體的解決方案

Hibernate缺點

  • 無法優化 sql
  • 自定義 sql 需要學習 HQL (但框架旨在消除sql - 與宗旨矛盾)

在這裏插入圖片描述

# Mybatis

  • sql 與 java 編碼分離
  • sql 開發人員控制

使用 Mybatis , 只要掌握好 sql 語句

半自動

歷史

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章