mybatis框架(02)

三 、mybatis解決的問題
第一:對應頻繁使用數據庫鏈接,咱們能夠經過C3P0,BoneCP(推薦使用)等等鏈接池來解決
第二:將sql語句配置在xml配置文件中,即便sql變化,不須要對java代碼進行從新編譯。
第三:將sql語句及佔位符號和參數所有配置在xml中。
第四:將查詢的結果集,自動映射成java對象。java

4、開發mysql

一、 配置文件:log4j.properties、sqlMapConfig.xml、以及Bean對象須要映射的xml文件spring

log4j.propertiessql

log4j.rootLogger=DEBUG, Console

#Console  
log4j.appender.Console=org.apache.log4j.ConsoleAppender  
log4j.appender.Console.layout=org.apache.log4j.PatternLayout  
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n

sqlMapConfig.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>
    <!-- 和spring整合後 environments配置將廢除 -->
    <environments default="development">
        <environment id="development">
            <!-- 使用jdbc管理事務mybatis -->
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url"
                    value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" />
                <property name="username" value="root" />
                <property name="password" value="root" />
            </dataSource>
        </environment>
    </environments>
    <!-- 加載映射文件 -->
    <mappers>
        <mapper resource="sqlmap/User.xml" />
    </mappers>
</configuration>

這裏面個人Bean爲User因此名字就叫user.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">
        <!--
        1.User.xml(原始ibatis命名),mapper代理開發的映射文件命名XxxMapper.xml
        2.namespace命名空間,做用就是對sql進行分類化管理,理解sql隔離
        3.注意:使用mapper代理開發,namespace有特殊的做用
        -->
<mapper namespace="test">
        <!--在映射文件中配置不少sql語句-->
        <!--需求:經過id查詢用戶表的記錄-->
        <!--
            1.標識映射文件中的sql,將sql語句封裝到mapped statement對象中,因此稱爲statement的id
            2.parameterType:指定輸入參數類型
            3.#{}:表示一個佔位符
            4.#{id}:其中的id表示接收的輸入參數,參數名稱就是id,若是輸入參數是簡單類型,#{}中的參數名能夠任意,能夠爲value或者其餘
            5.resultType:指定sql輸出結果的所映射的java對象類型,select指定resultType表示將單條記錄映射成的java對象
        -->
        <select id="findUserById" parameterType="java.lang.Integer" resultType="cn.mybaitis.pojo.User">
                SELECT * FROM USER WHERE id=#{id}
        </select>

        <!--
            1.需求根據用戶名稱模糊查詢
            2.思路:模糊查詢返回結果多是多條紀錄
            3.resultType:指定就是單條記錄所映射成java對象類型
            4.${}:表示拼接sql串,將接收到參數的內容不加任何修飾拼接在sql中
            5.使用${}容易引發sql注入
            6.${value}:接受輸入參數的內容,若是傳入類型是簡單類型,${}中只能用value
        -->
        <select id="findUserByName" parameterType="java.lang.String" resultType="cn.mybaitis.pojo.User">
                SELECT * FROM USER WHERE USERNAME LIKE '%${value}%'
        </select>

        <!--
            1.需求:添加用戶
            2.思路:建立對象,輸入參數是java對象類型
            3.#{}:指定pojo的屬性名,接收到pojo對象的屬性值,mybatis經過OGNL獲取對象的屬性值
            4.parameterType:指定輸入參數類型是pojo(包括用戶信息)
        -->
        <insert id="insertUser" parameterType="cn.mybaitis.pojo.User">
            <!--
                將插入數據的主鍵返回,返回到user對象中
                SELECT LAST_INSERT_ID():獲得剛insert進去記錄的主鍵值,只適用與自增主鍵
                keyProperty:將查詢到主鍵值設置到parameterType指定的對象的哪一個屬性
                order:SELECT LAST_INSERT_ID()執行順序,相對於insert語句來講它的執行順序
                resultType:指定SELECT LAST_INSERT_ID()的結果類型
            -->
            <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
                SELECT LAST_INSERT_ID()
            </selectKey>
                INSERT INTO USER (USERNAME,BIRTHDAY,SEX,ADDRESS) VALUE (#{username},#{birthday},#{sex},#{address})
             <!--
                使用mysql的uuid()生成主鍵
                執行過程:
                首先經過uuid()獲得主鍵,將主鍵設置到user對象的id屬性中
                其次在insert執行時,從user對象中取出id屬性值
             -->
            <!--
            <selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String">
                SELECT uuid()
            </selectKey>
                insert into user(id,username,birthday,sex,address) value(#{id},#{username},#{birthday},#{sex},#{address})
            -->
        </insert>

        <!--
            1.需求:根據Id刪除用戶
            2.思路:傳入id
        -->
        <delete parameterType="java.lang.Integer" id="deleteUserById">
                DELETE FROM USER WHERE id =#{id}
      </delete>

        <!--
            1.需求更新用戶
            2.根據傳入的id修改用戶
         -->
        <update parameterType="cn.mybaitis.pojo.User" id="updateUser">
                UPDATE USER SET username=#{username},sex=#{sex},address=#{address},birthday=#{birthday} WHERE id=#{id}
        </update>
</mapper>

以上爲對用戶的增刪該查(包括模糊查詢)的一個xml。session

User.javamybatis

package cn.mybaitis.pojo;
import java.io.Serializable;
import java.util.Date;
public class User implements Serializable {
    private static final long serialVersionUID = 1L;
    //屬性名和數據字段對應
    private int id;//主鍵
    private String username;//姓名
    private String sex;//性別
    private Date birthday;//生日
    private String address;//住址

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public Date getBirthday() {
        return birthday;
    }
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    @Override
    public String toString() {
        return "User [id=" + id + ", username=" + username + ", sex=" + sex
                + ", birthday=" + birthday + ", address=" + address + "]";
    }
}

查詢案例代碼app

package cn.mybaitis.first;

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

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 cn.mybaitis.pojo.User;

public class MyBatis_select {
    /**
     * 
     * @Title: main
     * @Description: TODO (根據id查詢用戶)
     * @Author: Hanson                
     * @Create Date: 2015年11月7日 下午9:17:56
     * @History: 2015年11月7日 下午9:17:56 Hanson Created.
     *
     * @param args
     * @throws IOException
     *
     */
    public static void main(String[] args) throws IOException {
        // mybatis的配置文件
        String resource = "SqlMapConfig.xml";
        InputStream in = Resources.getResourceAsStream(resource);
        // 建立會話工廠
        SqlSessionFactory sqlFactory = new SqlSessionFactoryBuilder().build(in);
        // 獲得SqlSession
        SqlSession sqlSession = sqlFactory.openSession();

        /*
         * 查詢一條紀錄
         * 經過SQLsession操做數據 
         * 第一個參數爲Student.xml定義的statement的id 
         * 第二個參數:輸入參數
         */
        User user = sqlSession.selectOne("test.findUserById", 1);
        System.out.println(user);
        //釋放資源
        sqlSession.close();
    }
    //模糊查詢
    @Test
    public void testFindByUsername() throws Exception {
        // 建立會話工廠
        SqlSessionFactory sqlFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("SqlMapConfig.xml"));
        // 獲得SqlSession
        SqlSession sqlSession = sqlFactory.openSession();
        //list中的user和映射文件中的resultType所指定的類型一致
        List<User> list =sqlSession.selectList("test.findUserByName", "小明");
        for(User user: list){
            System.out.println(user);
        }
        sqlSession.close();
    }

}

插入代碼ide

package cn.mybaitis.first;

import java.io.IOException;
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 cn.mybaitis.pojo.User;

public class MyBatis_insert {
    /**
     * 插入用戶
     * @param args
     * @throws IOException
     */
    public static void main(String[] args) throws IOException {
        // mabatis配置文件
        String resource = "SqlMapConfig.xml";
        // 對mybatis流化
        InputStream in = Resources.getResourceAsStream(resource);
        // 建立SqlSessionFacrtory
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
                .build(in);
        // 打開SqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        /**
         * 業務處理 1,先定義對象 2,執行操做 3,提交事物4,歸還資源
         */
        User user = new User();
        user.setUsername("訂飯");
        user.setSex("2");
        sqlSession.insert("test.insertUser", user); 
        sqlSession.commit();
        System.out.println(user.getId());
        sqlSession.close();

    }

}

刪除案例代碼

package cn.mybaitis.first;

import java.io.IOException;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class Mybatis_delete {
    /**
     * 刪除用戶
     * 
     * @param args
     * @throws IOException
     */
    public static void main(String[] args) throws IOException {
        SqlSessionFactory sqlFactory = new SqlSessionFactoryBuilder()
                .build(Resources.getResourceAsStream("SqlMapConfig.xml"));
        SqlSession sqlSession = sqlFactory.openSession();
        int i = sqlSession.delete("test.deleteUserById",27);
        System.out.println(i);
        sqlSession.commit();
        sqlSession.close();
    }

}

修改案例代碼

package cn.mybaitis.first;

import java.io.IOException;
import java.util.Date;

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 cn.mybaitis.pojo.User;

public class Mybatis_update {
/**
 * 更新用戶
 * @param args
 * @throws IOException 
 */
    public static void main(String[] args) throws IOException {
        SqlSessionFactory sqlFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("SqlMapConfig.xml"));
        // 獲得SqlSession
        SqlSession sqlSession = sqlFactory.openSession();
        User user = sqlSession.selectOne("test.findUserById", 1);
        user.setAddress("江蘇");
        user.setSex("男");
        user.setBirthday(new Date());
        user.setUsername("婁勳");
        int i =sqlSession.update("test.updateUser", user);

        System.out.println(i);

        sqlSession.commit();

        sqlSession.close();
    }

}
相關文章
相關標籤/搜索