Mybatis學習——Mybatis入門程序

MyBatis入門程序java

一.查詢用戶mysql

1.使用客戶編號查詢用戶web

  (1).建立一個數據表spring

USE spring; #建立一個名爲t_customer的表 CREATE TABLE t_customer( id INT(32) PRIMARY KEY AUTO_INCREMENT, username VARCHAR(50), jobs VARCHAR(50), phone VARCHAR(16) ); #插入3條數據 INSERT INTO t_customer VALUES('1','joy','doctor','13745874578'); INSERT INTO t_customer VALUES('2','jack','teacher','12745874578'); INSERT INTO t_customer VALUES('3','tom','worker','14745874578');

 

  (2)建立一個web項目,將Mybatis核心包放入,如圖sql

      

 

   (3)在src目錄下建立一個com.itheima.po包,在該包下建立持久化類Customer,數據庫

package com.itheima.po; /** * 客戶持久化類 * @author 12428 * */

import org.omg.CosNaming.NamingContextExtPackage.StringNameHelper; public class Customer { private Integer id; private String username; private String jobs; private String phone; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getJobs() { return jobs; } public void setJobs(String jobs) { this.jobs = jobs; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } @Override public String toString() { return "Customer [id=" + id + ", username=" + username + ", jobs=" + jobs + ", phone=" + phone + "]"; } }

  (4)在src目錄下,建立一個com.itheima.mapper的包,並在包中建立映射文件CustomerMapper.xmlapache

<?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">
<!-- namespace 表示命名空間 :通常是使用該mapper的位置-->
<mapper namespace="com.itheima.mapper.CustomerMapper">
    <!-- 根據客戶編號來獲取客戶信息 -->
    <select id="findCustomerById" parameterType="Integer" resultType="com.itheima.po.Customer"> select * from t_customer where id=#{id} </select>
</mapper>

  <mapper>元素是配置文件的根元素,它包含了一個namespace屬性,該屬性爲<mapper>元素指定了惟一的命名空間,一般會設置爲「包名+SQL映射文件名」的形式,其中<select>元素中的信息是用於執行查詢操做的配置,其中ID屬性是<select>在配置文件中的惟一標識。parameterType是指定參數類型,resultType是指定查詢返回查詢結果的類型。在定義的Sql語句中#{id}是用於表示一個佔位符數組

  (5)在src的目錄下,建立Mybatis的核心配置文件mybatis-config.xml,給配置文件中 的兩個步驟:(1)配置環境;(2)配置Mapper.xml的位置session

<?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>
    <!--1. 配置環境 -->
    <environments default="mysql">
        <!-- 配置id爲mysql的數據庫環境 -->
        <environment id="mysql">
            <!-- 使用JDBC的事務管理 -->
            <transactionManager type="JDBC"/>
            
            <!-- 數據庫鏈接池 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/spring"/>
                <property name="username" value="root"/>
                <property name="password" value="abc"/>
            </dataSource>
        </environment>
    
    </environments>
    
    <!-- 配置Mapper的位置 -->
    <mappers>
        <mapper resource="com/itheima/mapper/CustomerMapper.xml"/>    
    </mappers>
</configuration>

 

  (6).在src目錄下,建立一個com.itheima.test包,在該包下建立一個測試類,並編寫測試方法mybatis

package com.itheima.test; import java.io.InputStream; 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 com.itheima.po.Customer; /** * MyBatis的測試類 * @author 12428 * */
public class MyBatisTest { /** * 根據客戶編號查詢信息 * @throws Exception */ @Test public void findCustomerByIdTest()throws Exception{ //1.讀取配置文件
        String resource ="mybatis-config.xml"; InputStream inputStream=Resources.getResourceAsStream(resource); //2.根據配置文件來構建SqlSessionFactory會話工廠實例
        SqlSessionFactory sessionFactory=new SqlSessionFactoryBuilder().build(inputStream); //3.經過會話工廠實例建立會話對象
        SqlSession sqlSession=sessionFactory.openSession(); //4.經過sqlSession實例來執行方法
        Customer customer=sqlSession.selectOne("com.itheima.mapper.CustomerMapper.findCustomerById",1); //5.打印輸出結果
 System.out.println(customer.toString()); //6.關閉資源
 sqlSession.close(); } }

  (7)測試結果

       

2.使用客戶名模糊查詢用戶信息

  (1)在映射文件CustomerMapper.xml中,添加根據客戶模糊查詢客戶信息列表的Sql語句,具體代碼以下

<!-- 根據客戶名模糊查詢客戶的信息 -->
    <select id="findCustomerByName" parameterType="String" resultType="com.itheima.po.Customer"> select * from t_customer where username like '%${value}%'
    </select>

  在使用「${}」進行SQL字符串拼接時,是沒法防止SQL語句注入問題,若是想要實現模糊查詢,又要防止SQL語句,能夠對上述中的sql語句中的  '%${value}%'  改成concat()函數進行字符串拼接,以下

select * from t_customer where username like concat('%',#{value},'%')

  (2)在測試類中添加查詢的代碼

/** * 模糊查詢用戶的信息 */ @Test public void findCustomerByNameTest()throws Exception{ //1.讀取配置文件
        String resource ="mybatis-config.xml"; InputStream inputStream=Resources.getResourceAsStream(resource); //2.根據配置文件來構建SqlsessionFactory
        SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream); //3.根據工廠來建立會話對象
        SqlSession sqlSession= sqlSessionFactory.openSession(); //4.執行查詢方法
        List<Customer> customers=sqlSession.selectList("com.itheima.mapper.CustomerMapper.findCustomerByName", 'j'); //5.輸出結果集
        for(Customer customer:customers) { System.out.println(customer); } //6.關閉SqlSession
        sqlSession.close();

 

   (3)查詢結果

 

 二.添加客戶

在MyBatis中由一個約定:

  在形式上,不管輸出參數和輸入參數,都只能有一個,若是輸入的參數是多種類型的,能夠使用數組或者對象。

  若是輸入參數是簡單類型(8個基本類型+String)是能夠使用任何佔位符的,#{xxx},若是是對象類型,則必須是對象的屬性,#{屬性名}

1.添加客戶

  (1)在配置文件customerMapper.xml中添加以下內容

<!-- 添加用戶 -->
    <insert id="addCustomer" parameterType="com.itheima.po.Customer"> insert into t_Customer(username,jobs,phone) values(#{username},#{jobs},#{phone}) </insert>

  (2)在測試類中添加addCustomer方法

/** * 添加客戶 */ @Test public void addCustomer() throws Exception{ //1.讀取配置文件
        String resource="mybatis-config.xml"; InputStream inputStream=Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream); //2.經過SqlSession對象
        SqlSession sqlSession=sqlSessionFactory.openSession(); //3.執行添加操做 //3.1建立一個Customer對象
        Customer customer=new Customer(); customer.setUsername("rose"); customer.setJobs("student"); customer.setPhone("11111111"); //3.2執行sqlSession的添加操做
        int num=sqlSession.insert("com.itheima.mapper.CustomerMapper.addCustomer", customer); //3.3經過查詢結果來判斷是否插入成功
        if(num>0) { System.out.println("您成功插入了"+num+"條數據"); }else { System.out.println("插入失敗!"); } //3.4提交事務
 sqlSession.commit(); //4.關閉sqlSession
 sqlSession.close(); }

 

  注意:若是是增刪改,是須要提交事務的,否則是不會生效的。

三.修改用戶,刪除用戶

  (1).在配置文件中添加以下代碼:

 

  <!-- 更新客戶 -->
    <update id="updateCustomer" parameterType="com.itheima.po.Customer" > update t_customer set username=#{username},jobs=#{jobs},phone=#{phone} where id=#{id} </update>
    <!-- 刪除用戶 -->
    <delete id="deleteCustomer" parameterType="Integer"> delete from t_customer where id=#{id} </delete>

 

 

 

  (2)在測試類中添加以下代碼

 

/** * 更新客戶 */ @Test public void updateCustomerTest() throws Exception{ //1.讀取配置文件
        String resource ="mybatis-config.xml"; InputStream inputStream=Resources.getResourceAsStream(resource); //2.獲取會話工廠對象
        SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream); //3.建立會話對象
        SqlSession sqlSession=sqlSessionFactory.openSession(); //4.執行會話對象的方法
        Customer customer=new Customer(); customer.setId(1); customer.setUsername("zhaoli"); customer.setJobs("teacher"); customer.setPhone("111111"); int num=sqlSession.update("com.itheima.mapper.CustomerMapper.updateCustomer", customer); //5.輸出結果,根據返回的結果來判斷
        if(num>0) { System.out.println("修改爲功!"); }else { System.out.println("修改失敗!"); } //6.提交事務
 sqlSession.commit(); //7.關閉sqlSession對象
 sqlSession.close(); } /** * 刪除用戶 */ @Test public void deleteCustomer()throws Exception{ //1.讀取配置文件
        String resource ="mybatis-config.xml"; InputStream inputStream=Resources.getResourceAsStream(resource); //2.獲取會話工廠對象
        SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream); //3.建立會話對象
        SqlSession sqlSession=sqlSessionFactory.openSession(); //4.執行方法
        int num=sqlSession.delete("com.itheima.mapper.CustomerMapper.deleteCustomer", 1); //5.返回結果
        if(num>0) { System.out.println("刪除成功!"); }else { System.out.println("刪除失敗!"); } //6.提交事務
 sqlSession.commit(); //7.關閉sqlSession對象
 sqlSession.close(); }
相關文章
相關標籤/搜索