mybatis-02

Mybatis次日前端

一、MyBatis框架中的日誌記錄
MyBatis框架中,能夠經過log4j實現日誌輸出。
顯示MyBatis訪問數據庫的過程。如:執行的SQL,迭代的ResultSet等.
log4j是MyBatis框架必須依賴的插件jar包。
顯示日誌信息,必須經過log4j的配置文件:log4j.properties實現配置.
在資料中有配置文件模板.
log4j.properties日誌配置文件,必須保持在classpath下.src或bin目錄中
或者在mybatis整體配置文件裏面開啓mybatis日誌
<!-- 開啓mybatis的日誌記錄 -->
<settings>
  <setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
java

 1 log4j.rootCategory=DEBUG, CONSOLE,LOGFILE
 2 
 3 
 4 log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
 5 log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
 6 log4j.appender.CONSOLE.layout.ConversionPattern=-%p-%d{yyyy/MM/dd HH:mm:ss,SSS}-%l-%L-%m%n
 7 
 8 
 9 log4j.appender.LOGFILE=org.apache.log4j.FileAppender
10 log4j.appender.LOGFILE.File=D:/axis.log
11 log4j.appender.LOGFILE.Append=true
12 log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
13 log4j.appender.LOGFILE.layout.ConversionPattern=-%p-%d{yyyy/MM/dd HH:mm:ss,SSS}-%l-%L-%m%n
log4j基本配置

二、MyBatis框架中的參數
1:佔位符
1.2 用途:至關於JDBC技術中SQL語法內的的 ?
1.2 語法:#{變量名}
1.3 位置:在MyBatis映射文件中定義. 編寫在SQL語法中
1.4 參數傳遞特徵:佔位符命名大小寫敏感.
1.5 簡單類型:傳遞簡單類型變量: 八種基本類型,對應封裝類型,String,忽略佔位符的個數和佔位符變量的命名,將數據傳遞給全部的佔位符。
1.6 Map集合對象:根據佔位符的命名,做爲Map中的Key,查詢value. 將對象的數據,賦值給佔位符.若是佔位符命名在Map中不存在key, 參數數據爲null.sql

2:拼接符
拼接符使用方式和佔位符徹底一致,傳遞參數的特性有區別。
拼接符不能傳遞簡單類型變量。能夠傳遞自定義對象或Map集合對象。
儘可能避免使用拼接符,有SQL注入安全隱患。
2.1 用途:使用特定的語法,爲映射文件中的SQL語句,實現動態字符串拼接. 
2.2 語法:${變量名}
2.3 位置:在MyBatis映射文件中定義. 編寫在SQL語法中
佔位符與拼接符的區別:
1:#是將傳入的值當作字符串的形式,變量替換後,#{} 對應的變量自動加上單引號 
eg:select id,name,age from student where id =#{id},當前端把id值1,傳入到後臺的時候,就至關於 select id,name,age from student where id ='1'
2:$是將傳入的數據直接顯示生成sql語句,變量替換後,${} 對應的變量不會加上單引號 
eg:select id,name,age from student where id =${id},當前端把id值1,傳入到後臺的時候,就至關於 select id,name,age from student where id = 1
3:1)#{} 能防止sql 注入   
   2)${} 不能防止sql 注入

4:可是若是使用在order by 中就須要使用 $
5:在大多數狀況下仍是常常使用#,但在不一樣狀況下必須使用$
6:1)#{} 爲參數佔位符 ?,即sql 預編譯   
   2)${} 爲字符串替換,即 sql 拼接

7:1)#{}:動態解析 -> 預編譯 -> 執行       
   2)${}:動態解析 -> 編譯 -> 執行

#{} 和 ${} 在使用中的技巧和建議
(1)不管是單個參數,仍是多個參數,一概都建議使用註解@Param("")
(2)能用 #{} 的地方就用 #{},不用或少用 ${}
(3)表名做參數時,必須用 ${}。如:select * from ${tableName}
(4)order by 時,必須用 ${}。如:select * from t_user order by ${columnName}
三、MyBatis框架中的CUD(增刪改)和事物的管理
MyBatis框架中,默認事務爲rollback.(全部對數據庫的操做,只有JDBC默認的自動提交)
在SqlSession對象回收的時候,自動回滾.
默認事務定義的位置:
SqlSessionFactory.openSession();調用的時候,設置的默認事務.底層調用的是 openSession(false);
SqlSessionFactory.openSession(boolean autoCommit);
含義: 爲JDBC中的Connection設定自動提交參數. connection.setAutoCommit (autoCommit);
Mybatis具體實例增刪改查+分頁
pojo層和xml映射配置數據庫

 1 package com.boom.pojo;
 2 
 3 import java.io.Serializable;
 4 
 5 /**
 6  * 實體對應的數據庫表
 7  * @project_name mybatis-01 
 8  * @class_name User
 9  * @author Dilraba
10  */
11 public class User implements Serializable {
12     
13     private Integer userid;//用戶名ID
14     private String username;//用戶姓名
15     private Integer userage;//用戶年齡
16     
17     public Integer getUserid() {
18         return userid;
19     }
20     public void setUserid(Integer userid) {
21         this.userid = userid;
22     }
23     public String getUsername() {
24         return username;
25     }
26     public void setUsername(String username) {
27         this.username = username;
28     }
29     public Integer getUserage() {
30         return userage;
31     }
32     public void setUserage(Integer userage) {
33         this.userage = userage;
34     }
35     public User(Integer userid, String username, Integer userage) {
36         super();
37         this.userid = userid;
38         this.username = username;
39         this.userage = userage;
40     }
41     
42     public User() {
43         super();
44     }
45     
46     @Override
47     public String toString() {
48         return "User [userid=" + userid + ", username=" + username + ", userage=" + userage + "]";
49     }
50     
51 }
user.java
 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="com.boom.pojo.User">
 6     
 7     <select id="selectById" parameterType="int" resultType="com.boom.pojo.User">
 8         select * from user where userid = #{userid}
 9     </select>
10     
11     <!-- mybatis分頁 -->
12     <select id="selsectByAll"  resultType="com.boom.pojo.User">
13         select * from user
14     </select>
15     
16     <!-- 條件查詢(多個參數查詢,值綁定方式) -->
17     <select id="selsectByNameAndAge"  resultType="com.boom.pojo.User">
18         select * from user where username = #{username} and userage = #{userage}
19     </select>
20 
21     <!-- 條件查詢(map方式多個參數查詢,將map的key綁定到佔位符中) -->
22     <select id="selsectByNameAndAgeMap" parameterType="map"  resultType="com.boom.pojo.User">
23         select * from user where username = #{uname} and userage = #{uage}
24     </select>
25     
26     <!-- selectMap 拿結果集的值做爲map的key(key必須是結果集中存在的值) -->
27     <select id="selsectByName" resultType="com.boom.pojo.User">
28         select * from user
29     </select>
30     
31     <!-- 添加操做 -->
32     <insert id="insertUser" parameterType="com.boom.pojo.User" >
33         insert into user(username,userage) values(#{username},#{userage})
34     </insert>
35     
36     <!-- 更新 -->
37     <update id="updateById">
38         update user set username = #{username},userage = #{userage} where userid = #{userid}
39     </update>
40     
41     <!-- 刪除 -->
42     <delete id="deleteById">
43         delete from user where userid = #{userid}
44     </delete>
45     
46 </mapper>
User.xml

數據庫持久層apache

 1 package com.boom.dao;
 2 
 3 import java.util.List;
 4 import java.util.Map;
 5 
 6 import com.boom.pojo.User;
 7 
 8 public interface IUserDao {
 9     //根據ID查詢單條的數據
10     User selectById();
11     
12     //查詢全部的數據分頁顯示
13     List<User> selsectByAll();
14     
15     //條件查詢(多個參數查詢,值綁定方式)
16     List<User> selsectByNameAndAge(User user);
17     
18     //條件查詢(map方式多個參數查詢,將map的key綁定到佔位符中)
19     List<User> selsectByNameAndAgeMap(Map<String, Object> map);
20     
21     //selectMap 拿結果集的值做爲map的key(key必須是結果集中存在的值)
22     List<User> selsectByName(String username);
23     
24     //添加操做
25     void insertUser(User user);
26     
27     //更新
28     void updateById(User user);
29     
30     //刪除
31     void deleteById(Integer userid);
32 }
dao interface
  1 package com.boom.dao.impl;
  2 
  3 import java.util.List;
  4 import java.util.Map;
  5 
  6 import org.apache.ibatis.session.RowBounds;
  7 import org.apache.ibatis.session.SqlSession;
  8 import org.apache.ibatis.session.SqlSessionFactory;
  9 
 10 import com.boom.dao.IUserDao;
 11 import com.boom.pojo.User;
 12 import com.boom.util.MybatisUtil;
 13 
 14 public class UserDaoImpl implements IUserDao {
 15 
 16     /**
 17      * 根據ID查詢單條的數據
 18      */
 19     @Override
 20     public User selectById() {
 21         SqlSession session = MybatisUtil.openSession();
 22         return session.selectOne("selectById",4);
 23     }
 24 
 25     /**
 26      * 查詢全部的數據分頁顯示
 27      */
 28     @Override
 29     public List<User> selsectByAll() {
 30         SqlSession session = MybatisUtil.openSession();
 31         //RowBounds(offset, limit)分頁從下標0開始
 32         List<User> list = session.selectList("selsectByAll", null, new RowBounds(0,3));
 33         return list;
 34     }
 35 
 36     /**
 37      * 條件查詢(多個參數查詢,值綁定方式)
 38      */
 39     @Override
 40     public List<User> selsectByNameAndAge(User user) {
 41         SqlSession session = MybatisUtil.openSession();
 42         List<User> selectList = session.selectList("selsectByNameAndAge", user);
 43         return selectList;
 44     }
 45     
 46     /**
 47      * 條件查詢(map方式多個參數查詢,將map的key綁定到佔位符中)
 48      */
 49     @Override
 50     public List<User> selsectByNameAndAgeMap(Map<String, Object> map) {
 51         SqlSession session = MybatisUtil.openSession();
 52         List<User> selectListMap = session.selectList("selsectByNameAndAgeMap", map);
 53         return selectListMap;
 54     }
 55 
 56     
 57     /**
 58      * selectMap 拿結果集的值做爲map的key(key必須是結果集中存在的值)
 59      */
 60     @Override
 61     public List<User> selsectByName(String username) {
 62         SqlSession session = MybatisUtil.openSession();
 63         Map<String, Object> selectMap = session.selectMap("selsectByName", "username");
 64         System.out.println(selectMap);
 65         return null;
 66     }
 67 
 68     /**
 69      * 添加操做
 70      */
 71     @Override
 72     public void insertUser(User user) {
 73         SqlSession session = MybatisUtil.openSession();
 74         session.insert("insertUser", user);
 75         //手動提交事務
 76         session.commit();
 77     }
 78 
 79     /**
 80      * 更新
 81      */
 82     @Override
 83     public void updateById(User user) {
 84         SqlSession session = MybatisUtil.openSession();
 85         session.update("updateById", user);
 86         session.commit();
 87     }
 88 
 89     /**
 90      * 刪除
 91      */
 92     @Override
 93     public void deleteById(Integer userid) {
 94         SqlSession session = MybatisUtil.openSession();
 95         session.delete("deleteById", userid);
 96         session.commit();
 97     }
 98     
 99     
100 }
dao implements

工具類安全

 1 package com.boom.util;
 2 
 3 import java.io.InputStream;
 4 
 5 import org.apache.ibatis.io.Resources;
 6 import org.apache.ibatis.session.SqlSession;
 7 import org.apache.ibatis.session.SqlSessionFactory;
 8 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
 9 
10 public class MybatisUtil {
11     private static SqlSessionFactory factory = null;
12     static{
13         try {
14             if(factory == null){
15                 //經過工具類加載配置文件,返回讀取配置文件的IO流
16                 InputStream is = Resources.getResourceAsStream("mybatis-cfg.xml");
17                 //SqlSessionFactoryBuilder建立SqlSessionFactory對象的構建器
18                 factory = new SqlSessionFactoryBuilder().build(is);
19             }
20         } catch (Exception e) {
21             e.printStackTrace();
22         }
23     }
24     //獲取mybatis上下文對象
25     public static SqlSessionFactory getSqlSessionFactory(){
26         return factory;
27     }
28     //獲取SqlSession
29     public static SqlSession openSession(){
30         return factory.openSession();
31     }
32 }
View Code

測試類session

 1 package com.boom.test;
 2 
 3 import java.util.HashMap;
 4 import java.util.List;
 5 import java.util.Map;
 6 
 7 import com.boom.dao.IUserDao;
 8 import com.boom.dao.impl.UserDaoImpl;
 9 import com.boom.pojo.User;
10 
11 public class MybatisTest {
12 
13     public static void main(String[] args) {
14         
15         //根據ID查詢單條的數據
16         IUserDao ud = new UserDaoImpl();
17         System.out.println(ud.selectById());
18 
19         
20         /*
21         // 查詢全部的數據分頁顯示
22         IUserDao ud = new UserDaoImpl();
23         List<User> userList = ud.selsectByAll();
24         for (int i = 0; i < userList.size(); i++) {
25             System.out.println(userList.get(i));
26         }
27         */
28         
29         /*
30         //條件查詢(多個參數查詢)
31         IUserDao ud = new UserDaoImpl();
32         //建立User對象
33         User u = new User();
34         //將參數綁定經過user對象傳遞
35         u.setUsername("張三");
36         u.setUserage(18);
37         List<User> userList = ud.selsectByNameAndAge(u);
38         System.out.println(userList);
39         */
40         
41         /*
42         //條件查詢(map方式多個參數查詢,將map的key綁定到佔位符中)
43         IUserDao ud = new UserDaoImpl();
44         //建立map對象
45         Map<String , Object> map = new HashMap<>();
46         map.put("uname", "張三");
47         map.put("uage", 18);
48         List<User> userList = ud.selsectByNameAndAgeMap(map);
49         System.out.println(userList);
50         */
51         
52         /*
53         //selectMap 拿結果集的值做爲map的key(key必須是結果集中存在的值)
54         IUserDao ud = new UserDaoImpl();
55         ud.selsectByName(null);
56         */
57         
58         /*
59         //添加
60         IUserDao ud = new UserDaoImpl();
61         //建立User對象
62         User u = new User();
63         u.setUsername("新增測試");
64         u.setUserage(100);
65         ud.insertUser(u);
66         */
67         
68         /*
69         //更新
70         IUserDao ud = new UserDaoImpl();
71         //建立User對象
72         User u = new User();
73         u.setUserid(9);
74         u.setUsername("更新測試");
75         u.setUserage(102);
76         ud.updateById(u);
77         */
78         
79         /*
80         //刪除
81         IUserDao ud = new UserDaoImpl();
82         ud.deleteById(5);
83         */
84         
85     }  
86 
87 }
MybatisTest

整體架構圖
mybatis

相關文章
相關標籤/搜索