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&characterEncoding=utf-8&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>
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 + '}'; } }
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); } } }
不足和錯誤之處請指出,感謝。