多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 數據庫 > 數據庫應用 > Mybatis學習筆記

Mybatis學習筆記

來源:程序員人生   發布時間:2015-04-25 09:47:22 閱讀次數:4012次

1、數據庫字段名與實體類屬性名不相同問題

1.1 準備數據表和數據

CREATE TABLE orders( order_id INT PRIMARY KEY AUTO_INCREMENT, order_no VARCHAR(20), order_price FLOAT ); INSERT INTO orders(order_no, order_price) VALUES('aaaa', 23); INSERT INTO orders(order_no, order_price) VALUES('bbbb', 33); INSERT INTO orders(order_no, order_price) VALUES('cccc', 22);

1.2 定義實體類

public class Order { private int id; private String orderNo; private float price; }

1.3 查詢數據實現

方式1: 通過在sql語句中定義別名 <select id="selectOrder" parameterType="int" resultType="_Order"> select order_id id, order_no orderNo,order_price price from orders where order_id=#{id} </select> 方式2: 通過<resultMap> <select id="selectOrderResultMap" parameterType="int" resultMap="orderResultMap"> select * from orders where order_id=#{id} </select> <resultMap type="_Order" id="orderResultMap"> <id property="id" column="order_id"/> <result property="orderNo" column="order_no"/> <result property="price" column="order_price"/> </resultMap>

2、1對1關聯表查詢

2.1 創建表和數據

CREATE TABLE teacher( t_id INT PRIMARY KEY AUTO_INCREMENT, t_name VARCHAR(20) ); CREATE TABLE class( c_id INT PRIMARY KEY AUTO_INCREMENT, c_name VARCHAR(20), teacher_id INT ); ALTER TABLE class ADD CONSTRAINT fk_teacher_id FOREIGN KEY (teacher_id) REFERENCES teacher(t_id); INSERT INTO teacher(t_name) VALUES('LS1'); INSERT INTO teacher(t_name) VALUES('LS2'); INSERT INTO class(c_name, teacher_id) VALUES('bj_a', 1); INSERT INTO class(c_name, teacher_id) VALUES('bj_b', 2);


提出需求:根據班級id查詢班級信息(帶老師的信息)


2.2 定義實體類

public class Teacher { private int id; private String name; }
public class Classes { private int id; private String name; private Teacher teacher; }

2.3 定義SQL映照文件ClassMapper.xml

<!-- 方式1:嵌套結果:使用嵌套結果映照來處理重復的聯合結果的子集 封裝聯表查詢的數據(去除重復的數據) select * from class c, teacher t where c.teacher_id=t.t_id and c.c_id=1 --> <select id="getClass" parameterType="int" resultMap="ClassResultMap"> select * from class c, teacher t where c.teacher_id=t.t_id and c.c_id=#{id} </select> <resultMap type="_Classes" id="ClassResultMap"> <id property="id" column="c_id"/> <result property="name" column="c_name"/> <association property="teacher" javaType="_Teacher"> <id property="id" column="t_id"/> <result property="name" column="t_name"/> </association> </resultMap> <!-- 方式2:嵌套查詢:通過履行另外1個SQL映照語句來返回預期的復雜類型 SELECT * FROM class WHERE c_id=1; SELECT * FROM teacher WHERE t_id=1 //1 是上1個查詢得到的teacher_id的值 --> <select id="getClass2" parameterType="int" resultMap="ClassResultMap2"> select * from class where c_id=#{id} </select> <resultMap type="_Classes" id="ClassResultMap2"> <id property="id" column="c_id"/> <result property="name" column="c_name"/> <association property="teacher" column="teacher_id" select="getTeacher"> </association> </resultMap> <select id="getTeacher" parameterType="int" resultType="_Teacher"> SELECT t_id id, t_name name FROM teacher WHERE t_id=#{id} </select>


3、1對多的關聯查詢

3.1 增加學生表

CREATE TABLE student( s_id INT PRIMARY KEY AUTO_INCREMENT, s_name VARCHAR(20), class_id INT ); INSERT INTO student(s_name, class_id) VALUES('xs_A', 1); INSERT INTO student(s_name, class_id) VALUES('xs_B', 1); INSERT INTO student(s_name, class_id) VALUES('xs_C', 1); INSERT INTO student(s_name, class_id) VALUES('xs_D', 2); INSERT INTO student(s_name, class_id) VALUES('xs_E', 2); INSERT INTO student(s_name, class_id) VALUES('xs_F', 2);

由于學生表的加入,創建Student實體類,并修改Classes類,class與student是1對多的關系。

public class Student { private int id; private String name; } public class Classes { private int id; private String name; private Teacher teacher; private List<Student> students; }

3.2 定義映照文件

<!-- 方式1: 嵌套結果: 使用嵌套結果映照來處理重復的聯合結果的子集 SELECT * FROM class c, teacher t,student s WHERE c.teacher_id=t.t_id AND c.C_id=s.class_id AND c.c_id=1 --> <select id="getClass3" parameterType="int" resultMap="ClassResultMap3"> select * from class c, teacher t,student s where c.teacher_id=t.t_id and c.C_id=s.class_id and c.c_id=#{id} </select> <resultMap type="_Classes" id="ClassResultMap3"> <id property="id" column="c_id"/> <result property="name" column="c_name"/> <association property="teacher" column="teacher_id" javaType="_Teacher"> <id property="id" column="t_id"/> <result property="name" column="t_name"/> </association> <!-- ofType指定students集合中的對象類型 --> <collection property="students" ofType="_Student"> <id property="id" column="s_id"/> <result property="name" column="s_name"/> </collection> </resultMap> <!-- 方式2:嵌套查詢:通過履行另外1個SQL映照語句來返回預期的復雜類型 SELECT * FROM class WHERE c_id=1; SELECT * FROM teacher WHERE t_id=1 //1 是上1個查詢得到的teacher_id的值 SELECT * FROM student WHERE class_id=1 //1是第1個查詢得到的c_id字段的值 --> <select id="getClass4" parameterType="int" resultMap="ClassResultMap4"> select * from class where c_id=#{id} </select> <resultMap type="_Classes" id="ClassResultMap4"> <id property="id" column="c_id"/> <result property="name" column="c_name"/> <association property="teacher" column="teacher_id" javaType="_Teacher" select="getTeacher2"></association> <collection property="students" ofType="_Student" column="c_id" select="getStudent"></collection> </resultMap> <select id="getTeacher2" parameterType="int" resultType="_Teacher"> SELECT t_id id, t_name name FROM teacher WHERE t_id=#{id} </select> <select id="getStudent" parameterType="int" resultType="_Student"> SELECT s_id id, s_name name FROM student WHERE class_id=#{id} </select>


4、動態SQL與模糊查詢

4.1 準備數據表

create table d_user( id int primary key auto_increment, name varchar(10), age int(3) ); insert into d_user(name,age) values('Tom',12); insert into d_user(name,age) values('Bob',13); insert into d_user(name,age) values('Jack',18);

需求:實現多條件查詢用戶(姓名模糊匹配, 年齡在指定的最小值到最大值之間)


4.2 查詢條件實體類ConditionUser

private String name; private int minAge; private int maxAge;

4.3 表實體類User

private int id; private String name; private int age;

4.4 SQL映照文件userMapper.xml

<?xml version="1.0" encoding="UTF⑻" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis⑶-mapper.dtd"> <mapper namespace="com.atguigu.day03_mybatis.test6.userMapper"> <select id="getUser" parameterType="com.atguigu.day03_mybatis.test6.ConditionUser" resultType="com.atguigu.day03_mybatis.test6.User"> select * from d_user where age>=#{minAge} and age<=#{maxAge} <if test='name!="%null%"'>and name like #{name}</if> </select> </mapper>

4.5 測試

String statement = "com.atguigu.day03_mybatis.test6.userMapper.getUser"; List<User> list = sqlSession.selectList(statement, new ConditionUser("%a%", 1, 12)); System.out.println(list);

Mybatis中可用的動態SQL標簽



5、Mybatis緩存

正如大多數持久層框架1樣,MyBatis 一樣提供了1級緩存和2級緩存的支持
1. 1級緩存: 基于PerpetualCache 的 HashMap本地緩存,其存儲作用域為 Session,當 Session flush 或 close 以后,該Session中的所有 Cache 就將清空。
2. 2級緩存與1級緩存其機制相同,默許也是采取 PerpetualCache,HashMap存儲,不同在于其存儲作用域為 Mapper(Namespace),并且可自定義存儲源,如 Ehcache。
3. 對緩存數據更新機制,當某1個作用域(1級緩存Session/2級緩存Namespaces)的進行了 C/U/D 操作后,默許該作用域下所有 select 中的緩存將被clear。


5.1 1級緩存

1級緩存: 也就Session級的緩存(默許開啟)


a. 1級緩存: 也就Session級的緩存(默許開啟)

b. 查詢條件是1樣的

c. 沒有履行過session.clearCache()清算緩存或session.close()

d. 沒有履行過增刪改的操作(這些操作都會清算緩存)


5.2 2級緩存

只需要在userMapper.xml文件中添加1個標簽,即啟用2級緩存:

<cache/> <!―映照文件級別的緩存 -->

5.3 補充說明

a. 映照語句文件中的所有select語句將會被緩存。 
b. 映照語句文件中的所有insert,update和delete語句會刷新緩存。 
c. 緩存會使用Least Recently Used(LRU,最近最少使用的)算法來收回。 
d. 緩存會根據指定的時間間隔來刷新。 
e. 緩存會存儲1024個對象

<cache eviction="FIFO" //回收策略為先進先出 flushInterval="60000" //自動刷新時間60s size="512" //最多緩存512個援用對象 readOnly="true"/> //只讀


生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 国产精品原创永久在线观看 | 国产精品久久永久免费 | 亚洲欧美色综合自拍 | 日日夜夜精品免费视频 | 欧美性生交大片 | 18到20女人一级毛片 | 亚洲福利网址 | 欧美成综合网网站 | 最新国产成人综合在线观看 | 国内自拍网站 | 欧美日韩一区二区三区四区在线观看 | 毛片毛片毛片 | www在线观看免费视频 | 亚洲欧美日韩不卡 | 久草一本 | 啪啪.com| a毛片a毛片a视频 | 亚洲视频在线一区二区三区 | 一级做a爰性色毛片免费 | 国产美女无遮挡免费网站 | 欧美日韩亚洲综合另类ac | 在线看欧美成人中文字幕视频 | 精品番号 | 国产福利三区 | 欧美成人久久久免费播放 | 在线视频一区二区三区 | 黑人性xx| 成人欧美一区二区三区黑人 | 欧美3d怪物交 | 一级做a爱片久久毛片 | www.在线视频 | 欧美黄页网 | 操操操综合网 | 亚洲在线观看一区 | 97午夜理伦影院在线观看 | 国产福利视频一区二区 | 欧美日韩国产亚洲综合不卡 | 午夜dj在线观看免费高清视频在线观看 | 欧美成人性色xxxx视频 | 国产成人久视频免费 | 五月婷婷亚洲综合 |