定义: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]
对照一下数据库表: