天天看點

基于MyBatis的增删改查的基礎操作

MyBtais入門

  1. Mybatis和hibernate的差別
  • hibernate 是一個全表映射的架構,開發人員隻需要定義好持久化對象及相對應的映射檔案,并且通過hibernate官方提供的方法就可以完成持久化操作,這過程中可以不需要掌握sql語句的書寫,就開發效率而言會高于mybatis
  • 缺點:
  • 對sql語句查詢的支援比較差
  • 更新資料時,需要發送是以的字段,不支援存儲過程
  • 不可通過優化sql來提升性能
  • mybatis是一個半自動映射的架構,需要手工提供POJO、SQL和映射關系相對較hibernate,mybatis需要手寫MyBatis的sql語句,工作量較大;

    但可以配置動态SQL,并且優化SQL;支援存儲過程,就大中型的項目而言,更推薦MyBatis的使用

  1. 2.MyBatis的入門程式

    2.1 在項目中引入jar包:

    2.2 建立資料庫

    -- 建立資料庫,名稱為 mybatis_studycreate database mybatis_study; -- 選中名稱為 mybatis_study的資料庫 use mybatis_study; -- 建立使用者表, create table user( # id 整數類型,為主鍵、自動遞增 id int primary key auto_increment, # 使用者名 字元串類型,長度30個字元 username varchar(30), # 密碼 字元串類型,長度30個字元 password varchar(30) );

    2.3 持久化類

    package cn.javabs.mybatisdemo.pojo;public class User{ private Integer id; private String username; private String password; // 生成getter和setter方法--快捷鍵是---> alt +shift+s 選擇r // 覆寫 tostring方法--快捷鍵是---> alt +shift+s 選擇 s }

    2.4 持久化映射資訊配置檔案

    在src下建立cn.javabs.mybatisdemo.mapper包,用于存放映射檔案,命名為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="cn.javabs.mapper.UserMapper"> <!-namespace的屬性值命名規範為:映射資訊檔案所在的包名+映射檔案名稱--> <mapper namespace ="cn.javabs.mybatisdemo.mapper.UserMapper"> <!--insert标簽代表插入标簽,parameterType為傳入參數的類型--> <insert id="addUser" parameterType="cn.javabs.mybatis.pojo.User"> insert into user(id,username,password) values(#{id},#{username},#{password}) </insert> <mapper>

    2.5 持久化核心配置檔案:

    在src下建立一個xml檔案,命名為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> <environments default="mysql"> <environment id="mysql"> <transactionManager type="jdbc"></transactionManager> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql:///user"/> <property name="username" value="root"/> <property name="password" value="sorry"/> </dataSource> </environment> </environments> <mappers> <mapper resource="cn/javabs/mapper/UserMapper.xml" /> </mappers> </configuration>

  • 添加使用者

    public class TestMybatisData{ @Test public void addUserTest(){ // 通過位元組輸入流擷取核心配置檔案 InputStream is = TestMybatisData.class.getClassLoader.getResouceAsStream("mybatis-config"); // 建構Sql會話工廠對象 SqlSessionFactory sessionFactory = new SqlSessionFactoryBuild().builder(is); // 通過會話工廠對象擷取session SqlSession session = sessionFactory.openSession(); // 執行個體化持久化對象,并且完成指派操作 User u = new User(); u.setId(3); u.setUsername("李白"); //insert 中傳入的第一個參數為映射檔案的全包名+映射檔案名 // 第二個參數為持久化對象 int rows = session.insert("cn.javabs.mybatisdemo.mapper.UserMapper.addUser",u); if(rows > 0){ System.out.println("執行成功,已插入"+rows+"條語句"); }else{ System.out.println("執行失敗); } } }

  • 删除使用者

    @Testpublic void delUserById() { InputStream is = TestData.class.getClassLoader().getResourceAsStream("mybatis-config.xml"); SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is); SqlSession session = sessionFactory.openSession(); User u = new User(); u.setId(3); int rows = session.delete("cn.javabs.mapper.UserMapper.deleteUserById",u); if(rows>0){ System.out.println("語句執行成功,删除"+rows+"條數"); }else{ System.out.println("删除語句失敗"); } session.commit(); session.close(); }

    映射配置檔案:

    <delete id="deleteUserById" parameterType="Integer"> delete from user where id = #{id} </delete>

  • 更改使用者

    @Testpublic void updateUserTest { InputStream is = TestData.class.getClassLoader().getResourceAsStream("mybatis-config.xml"); SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is); SqlSession session = sessionFactory.openSession(); User u = new User(); u.setId(31); u.setUsername("趙雲"); int rows = session.update("cn.javabs.mapper.UserMapper.updateUserById", u); if(rows > 0){ System.out.println("更新了"+rows+"條記錄"); }else{ System.out.println("更新失敗"); } session.commit(); session.close(); }

    配置檔案可以更改為

    <update id="updateUserById" parameterType="cn.javabs.po.User"> update user set username = #{username} where id = #{id} </update>

  • 查詢全部使用者

    @Testpublic void findAll() { InputStream is = TestData.class.getClassLoader().getResourceAsStream("mybatis-config.xml"); SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is); SqlSession session = sessionFactory.openSession(); User u = new User(); u.setId(3); List<Object> list = session.selectList("cn.javabs.mapper.UserMapper.queryUser"); if(list.size()>0){ for (int i = 1; i < list.size(); i++) { System.out.println("。。。"+list.toString()); } }else{ System.out.println("查詢語句失敗"); } session.commit(); session.close(); }

    配置檔案可以更改為:

    <select id="queryUser" resultType="cn.javabs.po.User"> select * from user </select>

  • 根據Id查詢使用者

    @Testpublic void findUserById() { InputStream is = TestData.class.getClassLoader().getResourceAsStream("mybatis-config.xml"); SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is); SqlSession session = sessionFactory.openSession(); User u = new User(); u.setId(31); u = session.selectOne("cn.javabs.mapper.UserMapper.queryUserById", u); if(u != null ){ System.out.println("目前使用者是:"+u); }else{ System.out.println("查詢失敗"); } session.commit(); session.close(); }

    配置檔案可以更改為

    <select id="queryUserById" parameterType="Integer" resultType="cn.javabs.po.User"> select * from user where id = #{id} </select>