定義:java
MyBatis 是支持普通 SQL查詢,存儲過程和高級映射的優秀持久層框架。web
使用方法:數據庫
1.導入jar包:mybatis和oracle數據庫鏈接包apache
2.配置mybatis.xml文件tomcat
<?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> <!-- 引入外部屬性文件 --> <properties resource=""></properties> <!-- 定義一個別名,名字通常爲java項目中包的名稱 --> <typeAliases> <package name=""/> </typeAliases> <!-- mybatis的環境 --> <environments default=""> <environment id=""> <!-- mybatis支持的事務 --> <!-- JDBC:數據源本身的事務管理 MANAGE(託管): 不支持tomcat,通常用在大型商業服務器,如:weblogic,jboss --> <transactionManager type=""></transactionManager> <!-- 數據鏈接類型:POOLED,UNPOOLED,JNDI使用應用服務器的數據源鏈接 --> <!-- POOLED:鏈接池 --> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <!--類的映射xml--> <mappers> <mapper resource=""/> </mappers> </configuration>
3.載入mybatis.xml配置服務器
import java.io.IOException; import java.io.InputStream; import java.io.Reader; 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 MyBatisUtil { private static SqlSessionFactory ssf; private static SqlSession ss; public static SqlSession getSqlSession() { InputStream in = null; //Reader reader = null;也可用此行和下方被註釋的代碼來載入xml try { in = Resources.getResourceAsStream("mybatis.xml"); //reader = Resources.getResourceAsReader("mybatis.xml"); ssf = new SqlSessionFactoryBuilder().build(in); ss = ssf.openSession(); in.close(); } catch (IOException e) { e.printStackTrace(); } return ss; } }
實例:使用MyBatis完成數據庫表的增刪改查session
1.導入jar包,鏈接oracle數據庫,配置mabatis.xml文件,載入mabatis.xml配置mybatis
db.properties:鏈接oracle所需的各項屬性oracle
driver=oracle.jdbc.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:orcl
username=db
password=123
mybatis.xml配置app
<?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> <!-- 引入外部屬性文件 --> <properties resource="db.properties"></properties> <!-- 定義一個別名 --> <typeAliases> <package name="maya.model"/> </typeAliases> <!-- mybatis的環境 --> <environments default="development"> <environment id="development"> <!-- mybatis支持的事務 --> <!-- JDBC:數據源本身的事務管理 MANAGE(託管): 不支持tomcat,通常用在大型商業服務器,如:weblogic,jboss --> <transactionManager type="JDBC"></transactionManager> <!-- 數據鏈接類型:POOLED,UNPOOLED,JNDI使用應用服務器的數據源鏈接 --> <!-- POOLED:鏈接池 --> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <mappers> <mapper resource="maya/dao/TUsersMapper.xml"/> </mappers> </configuration>
導入mybatis.xml配置
package maya.util; import java.io.IOException; import java.io.InputStream; import java.io.Reader; 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 MyBatisUtil { private static SqlSessionFactory ssf; private static SqlSession ss; public static SqlSession getSqlSession() { InputStream in = null; //Reader reader = null;也可用此行和下方被註釋的代碼來載入xml配置 try { in = Resources.getResourceAsStream("mybatis.xml"); //reader = Resources.getResourceAsReader("mybatis.xml"); ssf = new SqlSessionFactoryBuilder().build(in); ss = ssf.openSession(); in.close(); } catch (IOException e) { e.printStackTrace(); } return ss; } }
2.創建實體類,可用hibernate逆向生成
package maya.model; public class TUsers { private int id; private String users; private String password; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUsers() { return users; } public void setUsers(String users) { this.users = users; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String toString() { return "TUsers [id="+id+",users="+users+", password="+password+"]"; } }
3.實體類的映射配置和JUnit測試用例
實體類映射配置(TUsersMapper.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="maya.dao.TUsersMapper"> <resultMap type="tUsers" id="users"></resultMap> <!-- 查詢全部 --> <select id="list" resultType="maya.model.TUsers"> select * from t_users </select> <!-- 新增 --> <insert id="addUser" parameterType="tUsers"> insert into t_users values(sq_mybatis.nextval,#{users},#{password}) </insert> <!-- 修改 --> <update id="updateUser" parameterType="tUsers"> update t_users t set t.users=#{users}, t.password=#{password} where t.id=#{id} </update> <!-- 刪除 --> <delete id="deleteUser" parameterType="Integer" > delete t_users t where t.id=#{id} </delete> <!-- 條件查詢 --> <select id="selectByMap" parameterType="tUsers" resultMap="users"> select * from t_users t where t.users like #{p1} and t.password like #{p2} </select> </mapper>
JUnit測試用例(JTest.java)
package maya.util; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.ibatis.session.SqlSession; import org.junit.After; import org.junit.Before; import org.junit.Test; import maya.model.TUsers; public class JTest { private SqlSession ss; public void test() { List<TUsers> list = ss.selectList("maya.dao.TUsersMapper.list"); for (TUsers u : list) { System.out.println(u); } } public void add() { TUsers tu = new TUsers(); tu.setId(6); tu.setUsers("劉禪"); tu.setPassword("123"); int n = ss.insert("maya.dao.TUsersMapper.addUser",tu); System.out.println(n); } public void update() { TUsers tu = new TUsers(); tu.setId(5); tu.setUsers("劉後主"); tu.setPassword("321"); int n = ss.update("maya.dao.TUsersMapper.updateUser",tu); System.out.println(n); } public void delete() { int n = ss.delete("maya.dao.TUsersMapper.deleteUser",6); System.out.println(n); } @Test public void selectUsersByMap() { Map<String, Object> map = new HashMap<String, Object>(); //查找姓劉的,密碼有2的用戶 map.put("p1", "劉%"); map.put("p2", "%2%"); //方法指向maya.dao.TUsersMapper.xml中maya.dao.TUsersMapper的映射,id爲selectByMap的方法,並把參數map傳過去 List<TUsers> list = ss.selectList("maya.dao.TUsersMapper.selectByMap",map); for (TUsers tu : list) { System.out.println(tu); } } @Before//在test以前執行 public void setUpBeforeClass() throws Exception { ss = MyBatisUtil.getSqlSession(); } @After//在test以後執行 public void tearDownAfterClass() throws Exception { ss.commit(); } }
執行結果:
TUsers [id=5,users=劉後主, password=321]
TUsers [id=2,users=劉備, password=123]
對照一下數據庫表: