Mybatis-02(log4j,註解實現增刪改查, #{}和${}的區別是什麼?,lombok)
阿新 • • 發佈:2022-03-20
Log4j
①先導包
<dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>
②配置log4j.properites
#將等級為DEBUG的日誌資訊輸出到console和file這兩個目的地,console和file的定義在下面的程式碼 log4j.rootLogger=DEBUG,console,file #控制檯輸出的相關設定 log4j.appender.console = org.apache.log4j.ConsoleAppender log4j.appender.console.Target = System.out log4j.appender.console.Threshold=DEBUG log4j.appender.console.layout = org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=[%c]-%m%n #檔案輸出的相關設定 log4j.appender.file = org.apache.log4j.RollingFileAppender log4j.appender.file.File=./log/kuang.log log4j.appender.file.MaxFileSize=10mb log4j.appender.file.Threshold=DEBUG log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=[%p][%d{yy-MM-dd}][%c]%m%n #日誌輸出級別 log4j.logger.org.mybatis=DEBUG log4j.logger.java.sql=DEBUG log4j.logger.java.sql.Statement=DEBUG log4j.logger.java.sql.ResultSet=DEBUG log4j.logger.java.sql.PreparedStatement=DEBUG
③mybatis-config中新增setting
<settings> <setting name="logImpl" value="LOG4J"/> </settings>
註解實現增刪改查:
①編寫mybatis-config
<?xml version="1.0" encoding="UTF8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8"/> <property name="username" value="root"/> <property name="password" value="admin"/> </dataSource> </environment> </environments> <mappers> <mapper class="dao.UserMapper"/> </mappers> </configuration>
②編寫工具類MybatisUtils
package utils; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.IOException; import java.io.InputStream; //SqlSessionFacory public class MybatisUtils { private static SqlSessionFactory sqlSessionFactory; static{ try { String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } catch (IOException e) { e.printStackTrace(); } } public static SqlSession getSqlSession(){ return sqlSessionFactory.openSession(true);//這裡有一個引數true,表示自動提交事務 } }
③編寫實體類User
package pojo; public class User { private int id; private String name; private String pwd; public User() { } public User(int id, String name, String pwd) { this.id = id; this.name = name; this.pwd = pwd; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return pwd; } public void setPassword(String password) { this.pwd = password; } @Override public String toString() { return "pojo.User{" + "id=" + id + ", name='" + name + '\'' + ", pwd='" + pwd + '\'' + '}'; } }
④編寫介面UserMapper
package dao; import org.apache.ibatis.annotations.Select; import pojo.User; import java.util.List; import java.util.Map; public interface UserMapper { @Select("select * from user") List<User> getUserList(); @Select("select * from user where id=#{id}") User getUserById(int id);
@Insert("insert into user(id,name,pwd) values (#{id},#{name},#{pwd})")
int addUser(User user);
@Delete("delete from user where id = #{id}")
int deleteUser(User user);
@Update("update user set name=#{name},pwd=#{pwd} where id=#{id}")
int updateUser(User user);
}
註解實現只需將方法上添加註解,如上程式碼,然後需要在Mybatis-congfig中新增mapper對映(已在①中程式碼新增 )
如果引數有很多個,可以用以下程式碼:
@Select("select * from user where id=#{id}") User getUserById(@Param("id")int id);
在引數前面加上@Param
⑤編寫測試程式碼
import dao.UserMapper; import org.apache.ibatis.session.SqlSession; import org.junit.Test; import pojo.User; import utils.MybatisUtils; import java.util.HashMap; import java.util.List; import java.util.Map; public class MyTest { @Test public void test(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); List<User> userList = mapper.getUserList(); for (User user: userList) { System.out.println(user.toString()); } User user=mapper.getUserById(1); System.out.println(user.toString()); } }
一個面試題:
#{}和${}的區別是什麼?
a、#{}是預編譯處理,${}是字串替換。
b、Mybatis 在處理#{}時,會將 sql 中的#{}替換為?號,呼叫 PreparedStatement 的 set 方法來賦值;
c、Mybatis 在處理${}時,就是把${}替換成變數的值。
d、使用#{}可以有效的防止 SQL 注入,提高系統安全性。
#將傳入的資料都當成一個字串,會對自動傳入的資料加一個雙引號。如:order by #{user_id},如果傳入的值是111,那麼解析成sql時的值為order by “111”, 如果傳入的值是id,則解析成的sql為order by “id”.
Lombok的使用:
①下載外掛
②匯入jar包
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.12</version> <scope>provided</scope> </dependency>
③在實體類上添加註解:
@Data
@AllArgsConstructor
@NoArgsConstructor
@Data:無參構造,get、set、tostring、hashcode,equals
@AllArgsConstructor有參構造
@NoArgsConstructor無參構造
------------恢復內容結束------------