MyBatis 的简单应用

  • 博客分类:
  • MyBatis
MyBatis.callresultMapdynamic sql 

在做测试的时候本来加入oscache ,但是在使用的时候 ,发下 初始化异常,不知道需要注意那些地方, 希望 "da xia " 们 留言 谢谢!!!!

介绍

Java代码  
  1. 1.例子中包含了 mybatis 的常用sql的写法
  2. 2.动态sql 的应用
  3. 3.存储过程的使用

目录

MyBatis-config.xml 中 set 的说明 []: 表示 可能的不太正确

Xml代码  
  1. <!-- 配置设置 -->
  2. <settings>
  3. <!-- 配置全局性 cache 的 ( 开 / 关) default:true -->
  4. <setting name="cacheEnabled" value="true"/>
  5. <!-- 是否使用 懒加载 关联对象  同 hibernate中的延迟加载 一样  default:true -->
  6. <setting name="lazyLoadingEnabled" value="true"/>
  7. <!-- [当对象使用延迟加载时 属性的加载取决于能被引用到的那些延迟属性,否则,按需加载(需要的是时候才去加载)] -->
  8. <setting name="aggressiveLazyLoading" value="true"/>
  9. <!-- 是否允许单条sql 返回多个数据集  (取决于驱动的兼容性) default:true -->
  10. <setting name="multipleResultSetsEnabled" value="true"/>
  11. <!-- 是否可以使用列的别名 (取决于驱动的兼容性) default:true-->
  12. <setting name="useColumnLabel" value="true"/>
  13. <!--允许JDBC 生成主键。需要驱动器支持。如果设为了true,这个设置将强制使用被生成的主键,有一些驱动器不兼容不过仍然可以执行。  default:false-->
  14. <setting name="useGeneratedKeys" value="false"/>
  15. <!--指定 MyBatis 如何自动映射 数据基表的列 NONE:不隐射 PARTIAL:部分  FULL:全部-->
  16. <setting name="autoMappingBehavior" value="PARTIAL"/>
  17. <!-- 这是默认的执行类型
  18. SIMPLE :简单
  19. REUSE:执行器可能重复使用prepared statements 语句
  20. BATCH:执行器可以重复执行语句和批量更新
  21. -->
  22. <setting name="defaultExecutorType" value="SIMPLE"/>
  23. <!-- 设置驱动等待数据响应的超时数  默认没有设置-->
  24. <setting name="defaultStatementTimeout" value="25000"/>
  25. <!-- [是否启用 行内嵌套语句  defaut:false] -->
  26. <setting name="safeRowBoundsEnabled" value="false"/>
  27. <!-- [是否 启用  数据中 A_column 自动映射 到 java类中驼峰命名的属性 default:fasle] -->
  28. <setting name="mapUnderscoreToCamelCase" value="false"/>
  29. <!-- 设置本地缓存范围 session:就会有数据的共享  statement:语句范围 (这样就不会有数据的共享 ) defalut:session -->
  30. <setting name="localCacheScope" value="SESSION"/>
  31. <!-- 设置但JDBC类型为空时,某些驱动程序 要指定值,default:other -->
  32. <setting name="jdbcTypeForNull" value="OTHER"/>
  33. <!-- 设置触发延迟加载的方法  -->
  34. <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
  35. </settings>

表,序列 ,存储过程 的创建

存储过程

Java代码  
  1. create or replace procedure pro_getAllStudent
  2. (
  3. v_sid number,
  4. v_sname varchar2,
  5. userList_cursor out sys_refcursor
  6. )
  7. as
  8. begin
  9. update student set sname=v_sname where sid=v_sid;
  10. open userList_cursor for select* from student;
  11. end;

测试

Java代码  
  1. SQL> declare
  2. 2  v_student_row student%rowtype;
  3. 3  v_sid student.sid%type:=11;
  4. 4  v_sname student.sname%type:='张浩';
  5. 5  v_student_rows sys_refcursor;
  6. 6  begin
  7. 7  pro_getAllStudent(v_sid,v_sname,v_student_rows);
  8. 8  loop
  9. 9  fetch v_student_rows into v_student_row;
  10. 10  exit when v_student_rows%notfound;
  11. 11  Dbms_Output.put_line('第'||v_student_rows%rowcount||'行,学生id'||v_student_row.sid||'--姓名:'||v_student_row.sname);
  12. 12  end loop;
  13. 13  close v_student_rows;
  14. 14  end;
  15. 15  /

序列

Java代码  
  1. -- Create sequence
  2. create sequence STUDENT_SEQ
  3. minvalue 1
  4. maxvalue 999999999999999999999999999
  5. start with 32
  6. increment by 1
  7. cache 20;

学生表

Java代码  
  1. create table STUDENT
  2. (
  3. SID    NUMBER(8) primary key not null,
  4. SNAME  VARCHAR2(20) not null,
  5. MAJOR  VARCHAR2(100),
  6. BIRTH  DATE,
  7. SCORE  NUMBER(6,2),
  8. CID    NUMBER(8),
  9. STATUS CHAR(3)
  10. )

班级表

Java代码  
  1. -- Create table
  2. create table CLASSES
  3. (
  4. CID        NUMBER(8) primary key  not null,
  5. CNAME      VARCHAR2(20) not null,
  6. TEACHER    VARCHAR2(25),
  7. CREATEDATE DATE
  8. )

mybatis-config.xml

Xml代码  
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  3. "http://mybatis.org/dtd/mybatis-3-config.dtd">
  4. <configuration>
  5. <!-- 配置的元素顺序 properties?, settings?, typeAliases?, typeHandlers?,
  6. objectFactory?, objectWrapperFactory?, proxyFactory?, plugins?,
  7. environments?, databaseIdProvider?, mappers -->
  8. <!-- 使用属性文件 而且可以在这里这是 覆盖文件中的值 -->
  9. <properties resource="mybatis-config.properties">
  10. <!--
  11. <property name="username" value="admin"/>
  12. <property name="password" value="123456"/>
  13. -->
  14. </properties>
  15. <!-- 别名的配置 -->
  16. <typeAliases>
  17. <typeAlias type="com.mybatis.student.Student" alias="Student"/>
  18. <typeAlias type="com.mybatis.classes.Classes" alias="Classes"/>
  19. <!--
  20. 也可以使用 包范围来配置
  21. <package name="com.mybatis"/>
  22. -->
  23. </typeAliases>
  24. <environments default="development">
  25. <environment id="development">
  26. <transactionManager type="JDBC"/>
  27. <dataSource type="POOLED">
  28. <property name="driver" value="${driver}"/>
  29. <property name="url" value="${url}"/>
  30. <property name="username" value="${username}"/>
  31. <property name="password" value="${password}"/>
  32. </dataSource>
  33. </environment>
  34. </environments>
  35. <mappers>
  36. <mapper resource="com/mybatis/student/StudentMapper.xml"/>
  37. <mapper resource="com/mybatis/classes/ClassesMapper.xml"/>
  38. </mappers>
  39. </configuration>

mybatis-config.properties

Xml代码  
  1. driver=oracle.jdbc.driver.OracleDriver
  2. url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
  3. username=luob
  4. password=luob

Student.java

Java代码  
  1. package com.mybatis.student;
  2. import java.io.Serializable;
  3. import java.util.Date;
  4. import com.mybatis.classes.Classes;
  5. @SuppressWarnings("serial")
  6. public class Student implements Serializable {
  7. private int sid;
  8. private String sname;
  9. private String major;
  10. private Date birth;
  11. private float score;
  12. private int cid;
  13. private int status;
  14. //get set

StudentMapper.xml

Xml代码  
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  3. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  4. <mapper namespace="com.mybatis.student">
  5. <!-- <!ELEMENT mapper (
  6. cache-ref | cache | resultMap* | parameterMap* | sql*
  7. | insert* | update* | delete* | select* )+> -->
  8. <!-- 设置缓存 如果用户需要登录 需要设置这种类型 type=org.mybatis.caches.oscache.LoggingOSCache-->
  9. <cache eviction="FIFO" readOnly="true" size="256" flushInterval="60000"/>
  10. <!-- 定义可以重用的sql 代码片段  -->
  11. <sql id="studentColumns">sid,sname,score</sql>
  12. <!-- 自定义结果集 -->
  13. <resultMap type="Student" id="studentResultMap">
  14. <id property="sid" column="SID"/>
  15. <result property="sname" column="SNAME"/>
  16. <result property="score" column="SCORE"/>
  17. </resultMap>
  18. <resultMap type="Student" id="studentAllResultMap">
  19. <id property="sid" column="SID"/>
  20. <result property="sname" column="SNAME"/>
  21. <result property="major" column="MAJOR"/>
  22. <result property="birth" column="BIRTH"/>
  23. <result property="score" column="SCORE"/>
  24. <result property="cid" column="CID"/>
  25. <result property="status" column="STATUS"/>
  26. </resultMap>
  27. <!-- 只用构造函数 创建对象 对于那些 比较少的列 -->
  28. <resultMap type="Student" id="studentAndClassesResultMap">
  29. <constructor>
  30. <idArg column="SID" javaType="int"/>
  31. <arg column="SNAME" javaType="String"/>
  32. <arg column="SCORE" javaType="float"/>
  33. </constructor>
  34. <association property="classes" javaType="Classes" resultMap="com.mybatis.classes.classesResultMap"/>
  35. </resultMap>
  36. <select id="selectStudentAndClassBySname" parameterType="String" resultMap="studentAndClassesResultMap">
  37. select s.sid,s.sname,s.score,c.cid,c.cname,c.teacher,c.createdate from student s left join classes c on s.cid=c.cid where s.sname=#{sname}
  38. </select>
  39. <insert id="addStudentBySequence" parameterType="Student" >
  40. <selectKey keyProperty="sid" resultType="int" order="BEFORE">
  41. select STUDENT_SEQ.nextVal from dual
  42. </selectKey>
  43. insert into student(sid,sname,major,birth,score)
  44. values (#{sid},#{sname},#{major},#{birth},#{score})
  45. </insert>
  46. <insert id="addStudent" parameterType="Student">
  47. insert into student(sid,sname,major,birth,score)
  48. values (#{sid},#{sname},#{major},#{birth},#{score})
  49. </insert>
  50. <delete id="delStudentById" parameterType="int">
  51. delete student where sid=#{sid}
  52. </delete>
  53. <select id="queryAllStudent" resultType="Student" useCache="true" flushCache="false" timeout="10000">
  54. select * from student
  55. </select>
  56. <!-- 参数可以指定一个特定的数据类型  还可以使用自定类型处理: typeHandler=MyTypeHandler -->
  57. <select id="queryStudentByName" resultType="Student" parameterType="String">
  58. select * from student where sname like #{property,javaType=String,jdbcType=VARCHAR}
  59. </select>
  60. <!-- 参数可以指定一个特定的数据类型 对于数字类型 ,numericScale=2  用于设置小数类型  -->
  61. <select id="queryStudentById" resultType="Student" parameterType="int">
  62. select * from student where sid=#{property,javaType=int,jdbcType=NUMERIC}
  63. </select>
  64. <update id="updStudentById" parameterType="Student">
  65. update student
  66. <trim prefix="SET" suffixOverrides=",">
  67. <if test="sname !=null">sname=#{sname},</if>
  68. <if test="major !=null">majoir=#{major},</if>
  69. <if test="birth !=null">birth=#{birth},</if>
  70. <if test="score !=null">score=#{score}</if>
  71. </trim>
  72. where sid=#{sid}
  73. </update>
  74. <!-- 在这里 利用了 可重用的sql代码片段 -->
  75. <select id="selectMapResult" resultMap="studentResultMap" parameterType="String">
  76. select <include refid="studentColumns"/> from STUDENT where sname like #{sname}
  77. </select>
  78. <!-- Dynamic  Sql 使用  if -->
  79. <select id="selectStudentByDynamicSql" parameterType="Student" resultType="Student">
  80. select * from student
  81. <where>
  82. <if test="sname !=null">
  83. sname like #{sname}
  84. </if>
  85. <if test="sid !=null">
  86. AND sid=#{sid}
  87. </if>
  88. </where>
  89. </select>
  90. <!-- 采用 OGNL 表达式  来配置动态sql 使用trim 去掉 where 中多余的  and 或者 or  where  choose  when otherwise-->
  91. <select id="selectStudentByDynamicSqlChoose" parameterType="Student" resultType="Student">
  92. select * from student
  93. <trim prefix="WHERE" prefixOverrides="AND | OR ">
  94. <choose>
  95. <when test=" sname !=null and sname.length() >0 ">
  96. sname like #{sname}
  97. </when>
  98. <when test="sid !=null and sid>0">
  99. AND sid = #{sid}
  100. </when>
  101. <otherwise>
  102. AND status='1'
  103. </otherwise>
  104. </choose>
  105. </trim>
  106. </select>
  107. <!-- 使用foreach 遍历list  只能小写-->
  108. <select id="selectStudentByIds" resultType="Student">
  109. select * from student
  110. where sid in
  111. <foreach collection="list" item="itm" index="index" open="(" separator="," close=")">
  112. #{itm}
  113. </foreach>
  114. </select>
  115. <!-- 使用foreach 遍历arry 只能小写 -->
  116. <select id="selectStudentByIdArray" resultType="Student">
  117. select * from student
  118. where sid in
  119. <foreach collection="array" item="itm" index="index" open="(" separator="," close=")">
  120. #{itm}
  121. </foreach>
  122. </select>
  123. <parameterMap type="map" id="procedureParam">
  124. <parameter property="sid" javaType="int" jdbcType="NUMERIC" mode="IN" />
  125. <parameter property="sname" javaType="String" jdbcType="VARCHAR" mode="IN" />
  126. <parameter property="studentList" javaType="ResultSet" jdbcType="CURSOR" mode="OUT" resultMap="studentAllResultMap"/>
  127. </parameterMap>
  128. <!--传入map集合参数 ,调用  待用游标存储过程(先执行 修改后然后查询所有)  -->
  129. <select id="getAllStudentAfterupdate" statementType="CALLABLE" useCache="true" parameterMap="procedureParam">
  130. {call LUOB.pro_getallstudent(?,?,?)}
  131. </select>
  132. </mapper>

Classes.java

Java代码  
  1. package com.mybatis.classes;
  2. import java.sql.Date;
  3. import java.util.List;
  4. import com.mybatis.student.Student;
  5. public class Classes {
  6. private int cid;
  7. private String cname;
  8. private String teacher;
  9. private Date createDate;
  10. private List<Student> students;
  11. //get set

ClassesMapper.xml

Xml代码  
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  3. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  4. <mapper namespace="com.mybatis.classes">
  5. <!-- 设置 缓存共享 -->
  6. <cache-ref namespace="com.mybatis.student"/>
  7. <resultMap type="Classes" id="classesResultMap">
  8. <id column="CID" property="cid"/>
  9. <result column="CNAME" property="cname"/>
  10. <result column="TEACHER" property="teacher"/>
  11. <result column="CREATEDATE" property="createDate"/>
  12. </resultMap>
  13. <!-- columnPrefix:别名前缀 -->
  14. <resultMap type="Classes" id="classesAndStudentListResultMap">
  15. <id column="CID" property="cid"/>
  16. <result column="CNAME" property="cname"/>
  17. <result column="TEACHER" property="teacher"/>
  18. <result column="CREATEDATE" property="createDate"/>
  19. <collection property="students" ofType="Student" resultMap="com.mybatis.student.studentResultMap" columnPrefix="stu_"/>
  20. </resultMap>
  21. <!-- 下面采用了 别名 stu_ 来区分列名 -->
  22. <select id="selectClassAndStudentListById" resultMap="classesAndStudentListResultMap" parameterType="int">
  23. select
  24. c.cid,
  25. c.cname,
  26. c.teacher,
  27. c.createdate,
  28. s.sid stu_sid,
  29. s.sname stu_sname,
  30. s.score stu_score
  31. from student s right join classes c on s.cid=c.cid where c.cid=#{cid}
  32. </select>
  33. </mapper>

TestStudentAndClasses.java

Java代码  
  1. package com.mybatis.student;
  2. import java.io.IOException;
  3. import java.io.Reader;
  4. import java.sql.CallableStatement;
  5. import java.sql.Connection;
  6. import java.sql.Date;
  7. import java.sql.DriverManager;
  8. import java.sql.ResultSet;
  9. import java.util.ArrayList;
  10. import java.util.HashMap;
  11. import java.util.List;
  12. import java.util.Map;
  13. import org.apache.ibatis.io.Resources;
  14. import org.apache.ibatis.session.SqlSession;
  15. import org.apache.ibatis.session.SqlSessionFactory;
  16. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  17. import org.junit.Before;
  18. import org.junit.Test;
  19. import com.mybatis.classes.Classes;
  20. public class TestStudentAndClasses {
  21. private SqlSessionFactory sqlSessionFactory;
  22. @Before
  23. public void init() throws IOException{
  24. Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
  25. sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
  26. }
  27. /**
  28. * 测试新增  手动给 sid
  29. */
  30. @Test
  31. public void testAddStudent(){
  32. SqlSession session=sqlSessionFactory.openSession();
  33. Student student =new Student();
  34. student.setSid(35);
  35. student.setSname("Guider");
  36. student.setScore(100);
  37. student.setMajor("Games");
  38. student.setBirth(Date.valueOf("2008-08-08"));
  39. session.insert("com.mybatis.student.addStudent", student);
  40. session.commit();
  41. session.close();
  42. }
  43. /**
  44. * 测试新增 采用序列 给sid
  45. */
  46. @Test
  47. public void testAddStudentBySequence(){
  48. SqlSession session=sqlSessionFactory.openSession();
  49. Student student =new Student();
  50. student.setSname("Provdwer");
  51. student.setScore(100);
  52. student.setMajor("Games");
  53. student.setBirth(Date.valueOf("2008-08-08"));
  54. session.insert("com.mybatis.student.addStudentBySequence", student);
  55. session.commit();
  56. session.close();
  57. }
  58. /**
  59. * 测试删除
  60. */
  61. @Test
  62. public void testDelStudentById(){
  63. SqlSession session=sqlSessionFactory.openSession();
  64. session.delete("com.mybatis.student.delStudentById", 12);
  65. session.commit();
  66. session.close();
  67. }
  68. /**
  69. * 测试根据 sid更新
  70. */
  71. @Test
  72. public void testUpdStudentById(){
  73. SqlSession session=sqlSessionFactory.openSession();
  74. Student student =new Student();
  75. student.setSid(0);
  76. student.setSname("Sandy");
  77. student.setScore(100);
  78. student.setMajor("sandy");
  79. student.setBirth(Date.valueOf("2008-08-08"));
  80. session.update("com.mybatis.student.addStudentBySequence", student);
  81. session.commit();
  82. session.close();
  83. }
  84. /**
  85. * 测试查询所有
  86. */
  87. @Test
  88. public void testQueryAllStudent(){
  89. List<Student> stuList=new ArrayList<Student>();
  90. SqlSession session=sqlSessionFactory.openSession();
  91. stuList=session.selectList("com.mybatis.student.queryAllStudent");
  92. session.commit();
  93. session.close();
  94. for (Student student : stuList) {
  95. System.out.println(student);
  96. }
  97. }
  98. /**
  99. * 测试根据 name 模糊查询
  100. */
  101. @Test
  102. public void testQueryStudentByName(){
  103. List<Student> stuList=new ArrayList<Student>();
  104. SqlSession session=sqlSessionFactory.openSession();
  105. stuList=session.selectList("com.mybatis.student.queryStudentByName","%l%");
  106. session.commit();
  107. session.close();
  108. for (Student student : stuList) {
  109. System.out.println(student);
  110. }
  111. }
  112. /**
  113. * 测个根据sid查找一个对象
  114. */
  115. @Test
  116. public void testQueryStudentById(){
  117. SqlSession session=sqlSessionFactory.openSession();
  118. Student student=(Student)session.selectOne("com.mybatis.student.queryStudentById",1);
  119. session.close();
  120. System.out.println(student);
  121. }
  122. /**
  123. * 测试 使用resultMap 自定返回值集合
  124. */
  125. @Test
  126. public void testStudentResultMap(){
  127. List<Student> stuList=new ArrayList<Student>();
  128. SqlSession session=sqlSessionFactory.openSession();
  129. stuList=session.selectList("com.mybatis.student.selectMapResult","%l%");
  130. session.close();
  131. for (Student student : stuList) {
  132. System.out.println(student);
  133. }
  134. }
  135. /**
  136. * 测试 左连接查  一对一 的 关系
  137. */
  138. @Test
  139. public void testSelectStudentAndClassBySname(){
  140. List<Student> stuList=new ArrayList<Student>();
  141. SqlSession session=sqlSessionFactory.openSession();
  142. stuList=session.selectList("com.mybatis.student.selectStudentAndClassBySname","luob");
  143. session.close();
  144. for (Student student : stuList) {
  145. System.out.println(student+"//--"+student.getClasses());
  146. }
  147. }
  148. /**
  149. * 测试 多对一的 关系的 右连接的查询
  150. */
  151. @Test
  152. public void testSelectClassAndStudentListById(){
  153. SqlSession session=sqlSessionFactory.openSession();
  154. Classes classes=(Classes)session.selectOne("com.mybatis.classes.selectClassAndStudentListById",1);
  155. session.close();
  156. System.out.println(classes);
  157. for (Student student : classes.getStudents()) {
  158. System.out.println(student+"//--"+student.getClasses());
  159. }
  160. }
  161. /**
  162. * 测试 动态sql 的 应用 where if  ognl
  163. */
  164. @Test
  165. public void testSelectStudentByDynamicSql(){
  166. Student pstudent=new Student();
  167. pstudent.setSid(1);
  168. List<Student> stuList=new ArrayList<Student>();
  169. SqlSession session=sqlSessionFactory.openSession();
  170. stuList=session.selectList("com.mybatis.student.selectStudentByDynamicSql",pstudent);
  171. session.close();
  172. for (Student student : stuList) {
  173. System.out.println(student+"//--"+student.getClasses());
  174. }
  175. }
  176. /**
  177. * 测试 动态sql 的choose  where when otherwise
  178. */
  179. @Test
  180. public void testSelectStudentByDynamicSqlChoose(){
  181. Student pstudent=new Student();
  182. pstudent.setSid(1);
  183. //pstudent.setSname("luob");
  184. List<Student> stuList=new ArrayList<Student>();
  185. SqlSession session=sqlSessionFactory.openSession();
  186. stuList=session.selectList("com.mybatis.student.selectStudentByDynamicSqlChoose",pstudent);
  187. session.close();
  188. for (Student student : stuList) {
  189. System.out.println(student+"//--"+student.getClasses());
  190. }
  191. }
  192. /**
  193. * 测试 动态sql 中foreach 的使用 传入 集合list 参数
  194. */
  195. @Test
  196. public void testSelectStudentByIds(){
  197. ArrayList<Integer> ids=new ArrayList<Integer>();
  198. ids.add(1);
  199. ids.add(6);
  200. ids.add(21);
  201. ids.add(23);
  202. List<Student> stuList=new ArrayList<Student>();
  203. SqlSession session=sqlSessionFactory.openSession();
  204. stuList=session.selectList("com.mybatis.student.selectStudentByIds",ids);
  205. session.close();
  206. for (Student student : stuList) {
  207. System.out.println(student+"//--"+student.getClasses());
  208. }
  209. }
  210. /**
  211. * 测试 动态sql 中foreach 的使用 传入 数组array 参数
  212. */
  213. @Test
  214. public void testSelectStudentByIdArray(){
  215. List<Student> stuList=new ArrayList<Student>();
  216. Integer[] idArry=new Integer[]{1,6,21,23};
  217. SqlSession session=sqlSessionFactory.openSession();
  218. stuList=session.selectList("com.mybatis.student.selectStudentByIdArray",idArry);
  219. session.close();
  220. for (Student student : stuList) {
  221. System.out.println(student+"//--"+student.getClasses());
  222. }
  223. }
  224. /**
  225. * 测试调用 存储过程   里面有游标哦   返回多个结果
  226. */
  227. @Test
  228. public void testGetAllStudentAfterupdate(){
  229. List<Student> stuList=new ArrayList<Student>();
  230. Map map = new HashMap();
  231. map.put("sid", 10);
  232. map.put("sname", "张翰");
  233. map.put("studentList",stuList);
  234. SqlSession session=sqlSessionFactory.openSession();
  235. session.selectOne("com.mybatis.student.getAllStudentAfterupdate",map);
  236. stuList=(ArrayList<Student>)map.get("studentList");
  237. for (Student student : stuList) {
  238. System.out.println(student+"//--"+student.getClasses());
  239. }
  240. session.close();
  241. }
  242. /**
  243. * 使用jdbc 测试 游标的创建是否成功
  244. */
  245. @Test
  246. public void testJdbcProcedure(){
  247. Connection con=null;
  248. try {
  249. Class.forName("oracle.jdbc.driver.OracleDriver");
  250. con=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl","luob","luob");
  251. CallableStatement cs=con.prepareCall("{call LUOB.pro_getallstudent(?,?,?)}");
  252. cs.setInt(1, 10);
  253. cs.setString(2,"张翰");
  254. //!!! 注意这里 type 在Types中 没有这个类型
  255. cs.registerOutParameter(3,oracle.jdbc.OracleTypes.CURSOR);
  256. cs.execute();
  257. ResultSet rs=(ResultSet)cs.getObject(3);
  258. while(rs.next()){
  259. Student student=new Student();
  260. student.setSid(rs.getInt(1));
  261. student.setSname(rs.getString(2));
  262. student.setMajor(rs.getString(3));
  263. student.setBirth(rs.getDate(4));
  264. student.setScore(rs.getFloat(5));
  265. student.setCid(rs.getInt(6));
  266. student.setStatus(rs.getInt(7));
  267. System.out.println(student);
  268. }
  269. } catch (Exception e) {
  270. e.printStackTrace();
  271. }
  272. }
  273. }

MyBatis 的简单应用(转载)相关推荐

  1. Mybatis框架简单使用

    Mybatis框架简单使用 环境搭建 新建一个JavaWeb项目,在web\WEB-INF\创建lib文件,并且在其下添加Mybatis的核心包以及依赖包,以及Mysql驱动包,junit4测试包等. ...

  2. mybatis第一讲:初探mybatis实现简单的查询

    一.知识要点 什么是MyBatis? (1)MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的 JDBC代码和参数的手工设置以及结果集的检索.MyB ...

  3. springboot中整合mybatis及简单使用

    springboot中整合mybatis及简单使用 1.引入依赖 2.在applicaiton.yaml中配置数据源以及mybatis 3.创建sql测试表 4.编写mapper接口和mapper.x ...

  4. 1112_Vue+SpringBoot+Mybatis的简单员工管理项目

    Vue+SpringBoot+Mybatis的简单员工管理项目 本文项目参考自:https://github.com/boylegu/SpringBoot-vue https://www.cnblog ...

  5. MyBatis框架简单实现

    MyBatis框架简单实现 1. MyBatis框架概念 2. MyBatis框架原理分析 3. MyBatis框架实现验证 1. MyBatis框架概念 mybatis三种实现方式 mybatis提 ...

  6. 2022最新最全MyBatis(简单全面,一发入魂,内容超详细)

    目录 一.MyBatis简介 1.MyBatis历史 2.MyBatis特性 3.MyBatis下载 4.和其它持久化层技术对比 JDBC Hibernate 和 JPA MyBatis 二.搭建My ...

  7. Mybatis 框架简单实现(一)

    最近复习一下Mybatis的简单用法,搭了一个非常简单的mybatis小练习,现将代码放置如下,方便以后学习. 我们都知道mybatis是支持sql查询.存储过程和高级映射的持久层框架. 我们来搭一个 ...

  8. Mybatis实现简单的数据库增删改查操作

    简介: MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以对配置和原生Ma ...

  9. 1.1 MyBatis的简单介绍和基本使用

    一.MyBatis的介绍 1.什么是MyBatis? MyBatis是一款优秀的持久层框架,它支持定制化SQL,存储过程以及高级映射.MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结 ...

最新文章

  1. AndroidStudio自动补完包的快捷键
  2. 内存映射IO (MMIO) 简介
  3. Hive用户权限管理理解
  4. 程序员,你想不想进大厂?
  5. POJ 2801 为什么相同功能的代码会wrong answer呢?求解释~~
  6. 全实践!3天物联网安全课程不断电
  7. 与7无关的数(信息学奥赛一本通-T1094)
  8. 今日恐慌与贪婪指数为91 贪婪程度与昨日持平
  9. ubuntu安装ssh无法连接解决日志(已解决,可连接)-转
  10. squid android 工具包,xUtils Android工具包 v3.9.0
  11. mysql 分页 pageindex_mysql 超1亿数据,优化分页查询
  12. 如何在 Mac App Store 中查看和阅读隐私标签?
  13. 网管必知:Windows常用网络命令详解
  14. 局域网服务器文件夹加密软件,企业局域网共享文件夹加密软件、局域网共享文件访问控制软件的使用...
  15. IE浏览器右下角小广告怎么去除
  16. 大数据scala面试题汇总
  17. 拒酒词――――――社交必备
  18. CPU构成详细介绍以及工作原理
  19. CSS基础班笔记(二)
  20. j - 分组(动态规划)

热门文章

  1. 【使用分享】一文掌握Aspose.Words for Java,实现Word文档的生成与操作
  2. php百度空间,PHP 登录百度空间
  3. uC-OS2 V2.93 STM32L476 移植:系统移植篇
  4. 【方案】AP5101 LED高压线性恒流IC 内1A 外2A 指示灯头灯汽车大灯矿灯
  5. 5.2.2 利用arp中间人攻击获取管理员账号密码
  6. Mac 安装home brew出错
  7. linux系统du指令,教你在Linux系统中使用du命令,包括用du与其他命令结合使用
  8. EasyExcel 基本使用、通俗易懂①
  9. CC2530,51单片机 延时一秒程序 循环次数 算法
  10. 全球导航卫星系统集成电路行业调研报告 - 市场现状分析与发展前景预测