标签:实例 initial password limited 需要 value 封装 mnt 事务管理
MyBatis介绍:
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。
MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。
Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。
使用步骤:
创建项目,导入Ojdbc.jar包和mybatis**.jar包,
设置数据库的信息的属性:
1 jdbc.username=test 2 jdbc.password=test 3 jdbc.url=jdbc:oracle:thin:@localhost:1521:xe 4 jdbc.driver=oracle.jdbc.OracleDriver
配置mybatis的总配置文件: mybatis-config.xml:
格式:
1 配置根标签 2 <!-- 根标签 --> 3 <configuration> 4 <!-- 5 引入属性文件 6 属性文件通常写数据库连接的信息 7 username(注意一个问题, 属性文件中不要单独写一个username) 8 password 9 url 10 driverClass 11 --> 12 <property resource="属性文件所在src下的位置" /> 13 14 <!-- 或者直接定义属性值 --> 15 <properties> 16 <property name="jdbc.username" value="test" /> 17 <property name="jdbc.password" value="test" /> 18 <property name="jdbc.driverClassName" value="oracle.jdbc.OracleDriver" /> 19 <property name="jdbc.url" value="jdbc:oracle:thin:@localhost:1521:orcl" /> 20 </properties> 21 22 <!-- 为实体类定义一个别名, 如果不定义别名, 在映射文件中就要写这个实体类的全路径名 --> 23 <typeAliases> 24 <!-- 这个写法取的别名是随意的, 可以自己任意定义 --> 25 <!-- <typeAlias type="类名的全路径名" alias="别名"></typeAlias> --> 26 <!-- 如果使用下面这个写法, 就是按照mybatis自己定义的规则, 这个包下的所有类的类名就是别名 --> 27 <package name="com.model"/> 28 <!-- 使用package标签实际是默认扫描model包下的所有的类, 如果在实体类的定义了注解@Alias(value = "..."), 则优先使用注解 --> 29 </typeAliases> 30 31 <!-- 配置mybatis的运行环境们 --> 32 <environments default="所使用的环境的标签id"> 33 <environment id="default"> 34 <!-- 35 配置事务管理器的类型 36 JDBC 37 MANAGED--(托管, 商业服务器上才有的功能, Tomcat没有) 38 --> 39 <transactionManager type="JDBC" /> 40 <!-- 41 POOLED(基于连接池的数据源) 42 UNPOOLED(使用普通的数据库连接) 43 JNDI(使用应用服务器上的JNDI连接配置数据源, 很少使用) 44 --> 45 <dataSource type="POOLED"> 46 <property name="username" value="${属性文件中配置的信息}"></property> 47 <property name="password" value="${属性文件中配置的信息}"></property> 48 <property name="url" value="${属性文件中配置的信息}"></property> 49 <property name="driver" value="${属性文件中配置的信息}"></property> 50 </dataSource> 51 </envirment> 52 </environments> 53 <mappers> 54 <!-- 挨个写明每个映射文件所在的位置 --> 55 <mapper resource="src下mapper映射文件的全路径名"> 56 <!-- 写明每个映射文件所对应的接口的限定名, package引入的文件一定是接口, 57 所以如果使用这种方式, 必须是使用接口对应映射文件的方式 --> 58 <package name="接口所在的包" /> 59 </mappers> 60 </configuration>
实例:
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE configuration 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 5 <configuration> 6 <!-- 引入数据库的信息的属性文件 --> 7 <properties resource="db.properties"></properties> 8 9 <typeAliases> 10 <package name="model"/> 11 </typeAliases> 12 13 <environments default="hanqi"> 14 <environment id="hanqi"> 15 <!-- 16 JDBC: 17 MANAGED:托管 18 --> 19 <transactionManager type="JDBC" /> 20 <!-- 21 配置数据库源 22 POOLED: 连接池 23 UNPOOLED: 非连接池 24 JNDI: 使用应用服务器上的数据库连接 25 --> 26 <dataSource type="POOLED"> 27 <property name="username" value="${jdbc.username}"/> 28 <property name="password" value="${jdbc.password}"/> 29 <property name="url" value="${jdbc.url}"/> 30 <property name="driver" value="${jdbc.driver}"/> 31 </dataSource> 32 </environment> 33 34 </environments> 35 36 <mappers> 37 <mapper resource="mapper/UserMapper.xml" /> 38 </mappers> 39 40 </configuration>
新建每个实体类的映射文件...Mapper.xml:
<!-- 定义每个实体类的映射文件 -->
<mapper namespace="唯一的id / 接口的全路径名">
<select id="被调用的id(唯一) / 需要执行的方法名"></select>
<insert></insert>
<update></update>
<delete></delete>
</mapper>
resultType: 类的全路径名 / 定义好的别名
resultMap: 指定返回结果的集合
parameterType: 指的是, 进行查询的时候所需要的参数类型
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 5 <mapper namespace="UserMapper"> 6 7 <resultMap type="user" id="UserList"> 8 <result property="id" column="id" /> 9 <result property="uname" column="uname" /> 10 <result property="upassword" column="upassword" /> 11 </resultMap> 12 13 <select id="selectUser" resultType="user"> 14 select * from p_user 15 </select> 16 17 <select id="selectOneUser" parameterType="Integer" resultMap="UserList"> 18 select * from p_User u where u.id=#{id} 19 </select> 20 21 <insert id="insertUser" parameterType="user" useGeneratedKeys="true" keyProperty="id" keyColumn="id"> 22 insert into p_User values(test1.nextval,#{uname},#{upassword}) 23 </insert> 24 25 <update id="updateUser" parameterType="Map"> 26 update p_User u set u.uname=#{uname},u.upassword=#{upassword} where u.id=#{id} 27 </update> 28 29 <delete id="deleteUser" parameterType="Map"> 30 delete p_user u where u.id=#{id} 31 </delete> 32 33 </mapper>
MyBatis工具类:
1, 构建SqlSessionFactory
InputStream in = Resources.getResourceAsStream("总配置文件所在的src下的路径");
SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(in);
2, 构建SqlSession(注意SqlSession不能以一个class成员变量的身份被返回)
SqlSession ss = ssf.openSession();
3, 直接运行
a: 直接运行映射文件中的sql语句
ss.select...
ss.insert...
ss.update...
ss.delete...
b: 使用接口映射配置文件
ss.getMapper(接口类名.class);
调用接口的方法
1 package util; 2 3 import java.io.IOException; 4 import java.io.InputStream; 5 6 import org.apache.ibatis.io.Resources; 7 import org.apache.ibatis.session.SqlSession; 8 import org.apache.ibatis.session.SqlSessionFactory; 9 import org.apache.ibatis.session.SqlSessionFactoryBuilder; 10 11 public class MyBatisUtil { 12 13 private static SqlSessionFactory sqlSessionFactory; 14 private static SqlSession sqlSession; 15 16 public static void main(String[] args) { 17 System.out.println(getSqlSession()); 18 } 19 20 public static void getSqlSessionFactory(){ 21 String path="mybatis-config.xml"; 22 try { 23 InputStream in=Resources.getResourceAsStream(path); 24 sqlSessionFactory =new SqlSessionFactoryBuilder().build(in); 25 26 } catch (IOException e) { 27 // TODO Auto-generated catch block 28 e.printStackTrace(); 29 } 30 } 31 32 public static SqlSession getSqlSession(){ 33 SqlSession sqlSession=null; 34 if(sqlSession==null){ 35 getSqlSessionFactory(); 36 } 37 sqlSession=sqlSessionFactory.openSession(); 38 return sqlSession; 39 } 40 41 public static void destory(SqlSession sqlSession){ 42 sqlSession.commit(); 43 sqlSession.close(); 44 } 45 }
创建用户实体类,属性和表的列明相对应:
1 package model; 2 3 import org.apache.ibatis.type.Alias; 4 //别名 5 @Alias("user") 6 public class User { 7 private Integer id; 8 private String uname; 9 private String upassword; 10 public Integer getId() { 11 return id; 12 } 13 public void setId(Integer id) { 14 this.id = id; 15 } 16 public String getUname() { 17 return uname; 18 } 19 public void setUname(String uname) { 20 this.uname = uname; 21 } 22 public String getUpassword() { 23 return upassword; 24 } 25 public void setUpassword(String upassword) { 26 this.upassword = upassword; 27 } 28 @Override 29 public String toString() { 30 return "User [id=" + id + ", uname=" + uname + ", upassword=" + upassword + "]"; 31 } 32 33 }
测试:
1 package test; 2 3 import static org.junit.Assert.*; 4 5 import java.util.Date; 6 import java.util.HashMap; 7 import java.util.List; 8 import java.util.Map; 9 10 import org.apache.ibatis.session.SqlSession; 11 import org.junit.After; 12 import org.junit.Before; 13 import org.junit.Test; 14 15 import model.User; 16 import util.MyBatisUtil; 17 18 19 public class JUTest { 20 21 private SqlSession ss; 22 23 @Before 24 public void setUp() throws Exception { 25 ss = MyBatisUtil.getSqlSession(); 26 } 27 28 @After 29 public void tearDown() throws Exception { 30 MyBatisUtil.destory(ss); 31 } 32 33 @Test 34 public void test() { 35 //查询 36 //List<User> list=ss.selectList("UserMapper.selectUser"); 37 38 //指定查询 39 //List<User> list1=ss.selectList("UserMapper.selectOneUser",1); 40 41 //增加 42 User u=new User(); 43 u.setId(null); 44 u.setUname("ccc"); 45 u.setUpassword("ccc"); 46 int a = ss.insert("UserMapper.insertUser", u); 47 48 //修改 49 /*Map<String, Object> map = new HashMap<String, Object>(); 50 map.put("id", 10); 51 map.put("uname", "233"); 52 map.put("upassword", "123"); 53 int a = ss.update("UserMapper.updateUser", map);*/ 54 55 //删除 56 /*Map<String, Integer> map = new HashMap<String,Integer>(); 57 map.put("id",113); 58 int a=ss.delete("UserMapper.deleteUser", map);*/ 59 System.out.println(a); 60 } 61 62 }
p_user表:
prompt PL/SQL Developer import file prompt Created on 2017年9月19日 by Administrator set feedback off set define off prompt Dropping P_USER... drop table P_USER cascade constraints; prompt Creating P_USER... create table P_USER ( id NUMBER not null, uname VARCHAR2(20) not null, upassword VARCHAR2(20) not null ) tablespace SYSTEM pctfree 10 pctused 40 initrans 1 maxtrans 255 storage ( initial 64K next 1M minextents 1 maxextents unlimited ); alter table P_USER add constraint PK_USER primary key (ID) using index tablespace SYSTEM pctfree 10 initrans 2 maxtrans 255 storage ( initial 64K next 1M minextents 1 maxextents unlimited ); prompt Disabling triggers for P_USER... alter table P_USER disable all triggers; prompt Loading P_USER... insert into P_USER (id, uname, upassword) values (10, ‘233‘, ‘123‘); insert into P_USER (id, uname, upassword) values (102, ‘aaa‘, ‘123‘); insert into P_USER (id, uname, upassword) values (103, ‘bbb‘, ‘456‘); insert into P_USER (id, uname, upassword) values (233, ‘ccc‘, ‘ccc‘); insert into P_USER (id, uname, upassword) values (104, ‘测试‘, ‘456‘); insert into P_USER (id, uname, upassword) values (105, ‘测试‘, ‘456‘); insert into P_USER (id, uname, upassword) values (106, ‘测试‘, ‘456‘); insert into P_USER (id, uname, upassword) values (107, ‘测试‘, ‘456‘); insert into P_USER (id, uname, upassword) values (108, ‘测试‘, ‘456‘); insert into P_USER (id, uname, upassword) values (109, ‘测试‘, ‘456‘); insert into P_USER (id, uname, upassword) values (110, ‘测试‘, ‘456‘); insert into P_USER (id, uname, upassword) values (111, ‘测试‘, ‘456‘); insert into P_USER (id, uname, upassword) values (112, ‘测试‘, ‘456‘); insert into P_USER (id, uname, upassword) values (115, ‘ccc‘, ‘ccc‘); insert into P_USER (id, uname, upassword) values (116, ‘ccc‘, ‘ccc‘); commit; prompt 15 records loaded prompt Enabling triggers for P_USER... alter table P_USER enable all triggers; set feedback on set define on prompt Done.
标签:实例 initial password limited 需要 value 封装 mnt 事务管理
原文地址:http://www.cnblogs.com/jiangwz/p/7554029.html