(本博客已由2019-08-27 優化更新)mysql
序言:fastMybatis是一個更加快捷的框架,搭建更加快捷以及使用簡單方便 ==》fastMybatis碼雲地址。git
fastmybatis框架全部方法具體詳解==》fastmybatis精裝版web
1.一、dao層對應的文件名TUserMapper.java 必須和resource/mybatis/mapper下面的TUserMapper.xml文件名一致。spring
1.二、fastMybatis的xml中的namepace不用寫,resultMap是嵌套在框架內部,不用改爲具體實體類。sql
1.三、實體類必需要有主鍵的註解,否則會報錯!數據庫
1.四、千萬不要加MapperScan() 的掃描,由於在fastmybatis已經作過處理了,否則會掃描不到fastmybatis已經封裝好得方法。apache
2.1 支持mysql,sqlserver,oracle,postgresql,sqlite。緩存
2.2 支持自定義sql,sql語句能夠寫在配置文件中,一樣支持mybatis標籤。springboot
2.3 輕量級,無侵入性,可與傳統mybatis用法共存。
2.1 建立springboot項目,勾選web,勾選mysql
2.2 application.properties
spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://${mysql.ip}:3306/test_msg1?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull spring.datasource.username=${mysql.username} spring.datasource.password=${mysql.password}
2.3 fastMybatis依賴
<dependency> <groupId>net.oschina.durcframework</groupId> <artifactId>fastmybatis-spring-boot-starter</artifactId> <version>1.0.2</version> </dependency>
2.4 在application.properties添加對fastMybatis配置
#fastmybatis mybatis.mapper-locations=classpath:mybatis/mapper/*.xml mybatis.fill.com.gitee.fastmybatis.core.support.DateFillInsert=add_time
2.5 目錄結構圖
而後在resource/mybatis下建立一個xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <settings> <!-- 全局映射器啓用緩存 --> <setting name="cacheEnabled" value="true" /> <!-- 查詢時,關閉關聯對象即時加載以提升性能 --> <setting name="lazyLoadingEnabled" value="true" /> <!-- 對於未知的SQL查詢,容許返回不一樣的結果集以達到通用的效果 --> <setting name="multipleResultSetsEnabled" value="true" /> <!-- 容許使用列標籤代替列名 --> <setting name="useColumnLabel" value="true" /> <!-- 容許使用自定義的主鍵值(好比由程序生成的UUID 32位編碼做爲鍵值),數據表的PK生成策略將被覆蓋 --> <setting name="useGeneratedKeys" value="false" /> <!-- 對於批量更新操做緩存SQL以提升性能:BATCH --> <setting name="defaultExecutorType" value="SIMPLE" /> <!-- 超時設置 --> <setting name="defaultStatementTimeout" value="25000" /> <setting name="logImpl" value="LOG4J" /> </settings> </configuration>
2.6 建立sql
CREATE TABLE `t_user` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID', `username` varchar(255) DEFAULT NULL COMMENT '用戶名', `state` tinyint(4) DEFAULT NULL COMMENT '狀態', `isdel` tinyint(4) DEFAULT NULL COMMENT '是否刪除', `remark` text COMMENT '備註', `add_time` datetime DEFAULT NULL COMMENT '添加時間', `money` decimal(10,2) DEFAULT NULL COMMENT '金額', `left_money` float DEFAULT NULL COMMENT '剩下的錢', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COMMENT='用戶表'
CREATE TABLE `user_info` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增主鍵', `user_id` int(11) NOT NULL COMMENT 't_user外鍵', `city` varchar(50) DEFAULT NULL COMMENT '城市', `address` varchar(100) DEFAULT NULL COMMENT '街道', `status` varchar(4) DEFAULT '0' COMMENT '類型', `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '添加時間', PRIMARY KEY (`id`) ) ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT='用戶信息表';
2.7 建立TUserMapper.xml
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- 注意:文件名必須跟Dao類名字一致,由於是根據文件名作關聯。 --> <mapper> <select id="selectByName" parameterType="String" resultMap="baseResultMap"> select * from t_user t where t.username = #{username} limit 1 </select> <select id="findByMap" parameterType="java.util.Map" resultMap="baseResultMap"> select * from t_user t where <choose> <when test="map.keys.size > 0"> <foreach collection="map.keys" item="key" separator="AND"> ${key} = #{map[${key}]} </foreach> </when> <otherwise> 1=2 </otherwise> </choose> </select> <select id="getByMap" parameterType="java.util.Map" resultMap="baseResultMap"> select * from t_user t where <choose> <when test="map.keys.size > 0"> <foreach collection="map.keys" item="key" separator="AND"> ${key} = #{map[${key}]} </foreach> LIMIT 1 </when> <otherwise> 1=2 </otherwise> </choose> </select> <select id="findJoinPage" parameterType="com.gitee.fastmybatis.core.query.Pageable" resultMap="baseResultMap"> SELECT t.*,t2.city,t2.address FROM t_user t LEFT JOIN user_info t2 ON t.id = t2.user_id <include refid="common.where" /> <include refid="common.orderBy" /> <include refid="common.limit" /> </select> </mapper>
2.8 entity和mapper
import java.math.BigDecimal; import java.util.Date; import javax.persistence.Column; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; @Table(name = "t_user") public class TUser { @Id @Column(name = "id") @GeneratedValue(strategy = GenerationType.IDENTITY) /** ID, 數據庫字段:id */ private Integer id; /** 用戶名, 數據庫字段:username */ private String username; /** 狀態, 數據庫字段:state */ private Byte state; /** 是否刪除, 數據庫字段:isdel */ @com.gitee.fastmybatis.core.annotation.LogicDelete private Boolean isdel; /** 備註, 數據庫字段:remark */ private String remark; /** 添加時間, 數據庫字段:add_time */ private Date addTime; /** 金額, 數據庫字段:money */ private BigDecimal money; /** 剩下的錢, 數據庫字段:left_money */ private Float leftMoney; /** 設置ID,數據庫字段:t_user.id */ public void setId(Integer id) { this.id = id; } /** 獲取ID,數據庫字段:t_user.id */ public Integer getId() { return this.id; } /** 設置用戶名,數據庫字段:t_user.username */ public void setUsername(String username) { this.username = username; } /** 獲取用戶名,數據庫字段:t_user.username */ public String getUsername() { return this.username; } /** 設置狀態,數據庫字段:t_user.state */ public void setState(Byte state) { this.state = state; } /** 獲取狀態,數據庫字段:t_user.state */ public Byte getState() { return this.state; } /** 設置是否刪除,數據庫字段:t_user.isdel */ public void setIsdel(Boolean isdel) { this.isdel = isdel; } /** 獲取是否刪除,數據庫字段:t_user.isdel */ public Boolean getIsdel() { return this.isdel; } /** 設置備註,數據庫字段:t_user.remark */ public void setRemark(String remark) { this.remark = remark; } /** 獲取備註,數據庫字段:t_user.remark */ public String getRemark() { return this.remark; } /** 設置添加時間,數據庫字段:t_user.add_time */ public void setAddTime(Date addTime) { this.addTime = addTime; } /** 獲取添加時間,數據庫字段:t_user.add_time */ public Date getAddTime() { return this.addTime; } /** 設置金額,數據庫字段:t_user.money */ public void setMoney(BigDecimal money) { this.money = money; } /** 獲取金額,數據庫字段:t_user.money */ public BigDecimal getMoney() { return this.money; } /** 設置剩下的錢,數據庫字段:t_user.left_money */ public void setLeftMoney(Float leftMoney) { this.leftMoney = leftMoney; } /** 獲取剩下的錢,數據庫字段:t_user.left_money */ public Float getLeftMoney() { return this.leftMoney; } }
import java.util.List; import java.util.Map; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Update; import com.gitee.fastmybatis.core.mapper.CrudMapper; import com.gitee.fastmybatis.core.query.Query; import com.myapp.entity.TUser; public interface TUserMapper extends CrudMapper<TUser, Integer> { // 自定義sql @Update("update t_user set username = #{username} where id = #{id}") int updateById(@Param("id") int id, @Param("username") String username); TUser selectByName(@Param("username") String username); List<TUser> findByMap(@Param("map") Map<String, Object> map); TUser getByMap(@Param("map") Map<String, Object> map); List<TUser> findJoinPage(Query query); }
@Controller public class HomeController { @Autowired TUserMapper tUserMapper; @GetMapping("/") @ResponseBody public String home(Locale locale, Model model,HttpServletRequest request) { Query query = new Query().eq("username","王五"); List<TUser> users = tUserMapper.list(query); TUser tUser = tUserMapper.selectByName("王五"); return "hello"; } }
最後測試成功!
3.1 咱們看下咱們的UserMapper.java繼承的接口
這即是它父類的父類
咱們能夠根據Query查詢各類東西,Query是一個封裝的類,包含eq,gt,lt等處理方法
可是它的這一點又和Mybatis不一致,fastmybatis與MyBatis generator對比
接下來咱們本身寫一個測試方法,在controller中添加一個新的查詢方法
@GetMapping("/getUser") @ResponseBody public void home(Locale locale, Model model,HttpServletRequest request) { Query query = new Query().eq("username","王五"); List<TUser> users = tUserMapper.list(query); System.out.println(users); }
經過Query也能操做查詢數據庫,相似於Hibernate方式,我的以爲FastMybatis使用的話正常只須要繼承一個CrudMapper就行了,連mapper也不須要寫,除非複雜的sql,比mybatis-plus更方便。