mybatis三種開發方式


MyBatis三種開發方式

先說一下基本配置

MyBatis.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>
    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>
    <!--別名-->
    <typeAliases>
        <package name="com.zby.entity"/>
    </typeAliases>
    <!--配置數據源,數據庫連接信息,支持配置多個數據源-->
    <environments default="development">
        <!--數據庫連接信息-->
        <environment id="development">
            <!--配置事務管理模式,讓mybatis采用jdbc的管理模式-->
            <transactionManager type="JDBC"/>
            <!--配置連接池,數據庫連接信息,type屬性在指明用哪個連接池,POOLED是mybatis自帶的連接池-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&amp;characterEncoding=utf-8&amp;useSSL=false"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!--引入要用的xml-->
        <mapper resource="com/zby/mapper/CourseMapper.xml"/>
    </mappers>
</configuration>
View Code

Course有四個屬性,創建他們的無參構造方法、Getter and Setter方法、to String方法

public class Course {
    private String cno;
    private String cname;
    private  int credit;
    private  int semester;
    public Course() {
    }
    public String getCno() {
        return cno;
    }
    public void setCno(String cno) {
        this.cno = cno;
    }
    public String getCname() {
        return cname;
    }
    public void setCname(String cname) {
        this.cname = cname;
    }
    public int getCredit() {
        return credit;
    }
    public void setCredit(int credit) {
        this.credit = credit;
    }
    public int getSemester() {
        return semester;
    }
    public void setSemester(int semester) {
        this.semester = semester;
    }
    @Override
    public String toString() {
        return "Course{" +
                "cno='" + cno + '\'' +
                ", cname='" + cname + '\'' +
                ", credit=" + credit +
                ", semester=" + semester +
                '}';
    }
}
View Code

CourseMapper.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">
<!--namespace給一個命名空間-->
<mapper namespace="com.zby.mapper.CourseMapper">
</mapper>

一.sqlSession執行對應語句
所需類:Course.java類,CourseMapper.xml、Test.java測試類
1.CourseMapper.xml里寫sql語句,直接輸出

<mapper namespace="com.zby.mapper.CourseMapper">
<!--resultType是告訴mybatis這個語句查詢要封裝成哪個類,
增刪改不用寫,因為增刪改沒有結果集,只需要接受一個int-->
<select id="listCourse" resultType="Course">
select * from course where cno=#{cno}
</select>
</mapper>

2.mybatis 配置文件Mybatis.xml里加語句引入要用的xml

<mappers>
<mapper resource="com/zby/mapper/CourseMapper.xml"/>
</mappers>

3.Test.java測試

public class Test {
    public static void main(String[] args) {
        //創建sqlsession的工廠,一定要寫配置文件在哪(由配置文件構建的),工廠一個項目有一個就夠,目的是生產session
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build
                (Test.class.getClassLoader().getResourceAsStream("MyBatis.xml"));
        //通過工廠生產sqlsession ,一切操作數據庫都依賴這個session,可以把這個session理解為jdbc中的Connection
        SqlSession session = factory.openSession();
//傳sql語句的全名,查的結果是數組,需要foreach遍歷 List<Course> courseList = session.selectList("com.zby.mapper.CourseMapper.listCourse");
   
for (Course course : courseList) { System.out.println(course); } } }

 

二.使用注解(基本不用)
所需類:Course.java類、CourseMapper.java接口、Test.java測試類
1.創建CourseMapper.java接口,在抽象方法上注解,注解內寫sql語句

public interface CourseMapper {
    //select 返回值是個集合,select id 為listCourse
    @Select("select * from course")
    List<Course> listCourse();
}

2..測試類測試

public class Test {
    public static void main(String[] args) {
        //創建sqlsession的工廠,一定要寫配置文件在哪(由配置文件構建的),工廠一個項目有一個就夠,目的是生產session
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build
                (Test.class.getClassLoader().getResourceAsStream("MyBatis.xml"));
        //通過工廠生產sqlsession ,一切操作數據庫都依賴這個session,可以把這個session理解為jdbc中的Connection
        SqlSession session = factory.openSession();
        
//利用sqlsession生成接口的實現類對象 CourseMapper courseMapper = session.getMapper(CourseMapper.class); //接口本來沒有實現類是無法創建對象的,但此處可以 for (Course course : courseMapper.listCourse()) { System.out.println(course); } } }

 

三.利用接口代理(常用)
所需類:Course.java類,CourseMapper.java接口,CourseMapper.xml、Test.java
1.創建一個接口,接口名與xml一樣,接口與xml放在一起,一個xml對應一個接口

2.在接口中定義抽象方法,返回值就寫你想要的,方法名就是xml中語句的 id
(xml中namespace的值是接口的全路徑)

 CourseMapper.java接口中定義方法

public interface CourseMapper {
    //select 返回值是個集合,select id 為listCourse
    List<Course> listCourse();
}

CourseMapper.xml sql查詢不變

<mapper namespace="com.zby.mapper.CourseMapper">
    <select id="listCourse" resultType="Course">
        select * from course where cno=#{cno}
    </select>
</mapper>

mybatis 配置文件Mybatis.xml里加語句引入要用的xml

<mappers>
<mapper resource="com/zby/mapper/CourseMapper.xml"/>
</mappers>

3.使用getMapper方法生成接口對象

Test.java測試

public class Test {
    public static void main(String[] args) {
        //創建sqlsession的工廠,一定要寫配置文件在哪(由配置文件構建的),工廠一個項目有一個就夠,目的是生產session
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build
                (Test.class.getClassLoader().getResourceAsStream("MyBatis.xml"));
        //通過工廠生產sqlsession ,一切操作數據庫都依賴這個session,可以把這個session理解為jdbc中的Connection
        SqlSession session = factory.openSession();
       
//利用sqlsession生成接口的實現類對象 CourseMapper courseMapper = session.getMapper(CourseMapper.class); //接口本來沒有實現類是無法創建對象的,但此處可以 for (Course course : courseMapper.listCourse()) { System.out.println(course); } } }

 

不足和錯誤之處請指出,感謝。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM