mybatis-plus的使用 ------ 入門

前言:

mybatis在持久層框架中還是比較火的括堤,一般項(xiàng)目都是基于ssm。雖然mybatis可以直接在xml中通過SQL語句操作數(shù)據(jù)庫抱既,很是靈活剪返。但正其操作都要通過SQL語句進(jìn)行,就必須寫大量的xml文件倚搬,很是麻煩冶共。mybatis-plus就很好的解決了這個(gè)問題。

一每界、mybatis-plus簡介:

Mybatis-Plus(簡稱MP)是一個(gè) Mybatis 的增強(qiáng)工具捅僵,在 Mybatis 的基礎(chǔ)上只做增強(qiáng)不做改變,為簡化開發(fā)眨层、提高效率而生庙楚。這是官方給的定義,關(guān)于mybatis-plus的更多介紹及特性趴樱,可以參考mybatis-plus官網(wǎng)馒闷。那么它是怎么增強(qiáng)的呢酪捡?其實(shí)就是它已經(jīng)封裝好了一些crud方法,我們不需要再寫xml了纳账,直接調(diào)用這些方法就行逛薇,就類似于JPA。

二疏虫、spring整合mybatis-plus:

正如官方所說永罚,mybatis-plus在mybatis的基礎(chǔ)上只做增強(qiáng)不做改變,因此其與spring的整合亦非常簡單卧秘。只需把mybatis的依賴換成mybatis-plus的依賴呢袱,再把sqlSessionFactory換成mybatis-plus的即可。接下來看具體操作:
1斯议、pom.xml:
核心依賴如下:

    <!-- spring -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>4.3.14.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-orm</artifactId>
        <version>4.3.14.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>4.3.14.RELEASE</version>
        <scope>test</scope>
    </dependency>
    <!-- mp 依賴 -->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus</artifactId>
        <version>2.3</version>
    </dependency>

注意:這些是核心依賴产捞,本項(xiàng)目還用到了mysql驅(qū)動、c3p0哼御、日志(slf4j-api坯临,slf4j-log4j2)、lombok恋昼。集成mybatis-plus要把mybatis看靠、mybatis-spring去掉,避免沖突液肌;lombok是一個(gè)工具挟炬,添加了這個(gè)依賴,開發(fā)工具再安裝Lombok插件嗦哆,就可以使用它了谤祖,最常用的用法就是在實(shí)體類中使用它的@Data注解,這樣實(shí)體類就不用寫set老速、get粥喜、toString等方法了。關(guān)于Lombok的更多用法橘券,請自行百度额湘。
2、log4j.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
        <param name="Encoding" value="UTF-8" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p %d{MM-dd
HH:mm:ss,SSS} %m (%F:%L) \n" />
        </layout>
    </appender>
    <logger name="java.sql">
        <level value="debug" />
    </logger>
    <logger name="org.apache.ibatis">
        <level value="info" />
    </logger>
    <root>
        <level value="debug" />
        <appender-ref ref="STDOUT" />
    </root>
</log4j:configuration>

3旁舰、jdbc.properties:

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:///數(shù)據(jù)庫名?useUnicode=true&characterEncoding=utf8
jdbc.username=#
jdbc.password=#

4锋华、mybatis-config.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>
</configuration>

注:因?yàn)槭桥cspring整合,所有mybatis-plus的大部分都寫在spring的配置文件中箭窜,這里定義一個(gè)空的mybatis-config.xml即可毯焕。
5、spring-dao.xml:

<?xml version="1.0" encoding="UTF-8"?>    
<beans xmlns="http://www.springframework.org/schema/beans"    
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
    xmlns:p="http://www.springframework.org/schema/p"  
    xmlns:aop="http://www.springframework.org/schema/aop"   
    xmlns:context="http://www.springframework.org/schema/context"  
    xmlns:jee="http://www.springframework.org/schema/jee"  
    xmlns:tx="http://www.springframework.org/schema/tx"  
    xsi:schemaLocation="    
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd  
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd  
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd  
        http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.0.xsd  
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">    
        
    <!-- 配置整合mybatis-plus過程 -->
    <!-- 1纳猫、配置數(shù)據(jù)庫相關(guān)參數(shù)properties的屬性:${url} -->
    <context:property-placeholder location="classpath:jdbc.properties" />
    <!-- 2、配置數(shù)據(jù)庫連接池 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="${jdbc.driver}"/>
        <property name="jdbcUrl" value="${jdbc.url}"/>
        <property name="user" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>
    <!-- mybatis的sqlsessionFactorybean:org.mybatis.spring.SqlSessionFactoryBean-->
    <!-- 3活孩、配置mybatis-plus的sqlSessionFactory -->
    <bean id="sqlSessionFactory" class="com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="configLocation" value="classpath:mybatis-config.xml"/>
        <property name="typeAliasesPackage" value="com.zhu.mybatisplus.entity"/>
    </bean>
    <!-- 4起趾、DAO接口所在包名,Spring會自動查找其下的類 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.zhu.mybatisplus.dao" />
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
    </bean> 
</beans>

6、entity:

@Data
@TableName(value = "tb_employee")//指定表名
public class Employee {
    //value與數(shù)據(jù)庫主鍵列名一致,若實(shí)體類屬性名與表主鍵列名一致可省略value
    @TableId(value = "id",type = IdType.AUTO)//指定自增策略
    private Integer id;
    //若沒有開啟駝峰命名砍鸠,或者表中列名不符合駝峰規(guī)則,可通過該注解指定數(shù)據(jù)庫表中的列名,exist標(biāo)明數(shù)據(jù)表中有沒有對應(yīng)列
    @TableField(value = "last_name",exist = true)
    private String lastName;
    private String email;
    private Integer gender;
    private Integer age;
}

7、mapper:

public interface EmplopyeeDao extends BaseMapper<Employee> {
}

這樣就完成了mybatis-plus與spring的整合窍株。首先是把mybatis和mybatis-spring依賴換成mybatis-plus的依賴,然后把sqlsessionfactory換成mybatis-plus的开睡,然后實(shí)體類中添加@TableName婚度、@TableId等注解哮翘,最后mapper繼承BaseMapper即可限煞。
8旺上、測試:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({"classpath:spring/spring-dao.xml"})
public class test {
    @Autowired
    private DataSource dataSource;
    @Test
    public void testDataSource() throws SQLException {
        System.out.println(dataSource.getConnection());
    }
}

運(yùn)行該junit窃这,可輸出獲取到的連接,說明整合沒問題:

三、mp的通用crud:

需求:
存在一張 tb_employee 表倍奢,且已有對應(yīng)的實(shí)體類 Employee畔裕,實(shí)現(xiàn)tb_employee 表的 CRUD 操作我們需要做什么呢岂丘?
基于 Mybatis:
需要編寫 EmployeeMapper 接口眠饮,并在 EmployeeMapper.xml 映射文件中手動編寫 CRUD 方法對應(yīng)的sql語句奥帘。
基于 MP:
只需要創(chuàng)建 EmployeeMapper 接口, 并繼承 BaseMapper 接口。
我們已經(jīng)有了Employee扔茅、tb_employee了已旧,并且EmployeeDao也繼承了BaseMapper了,接下來就使用crud方法咖摹。
1评姨、insert操作:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({"classpath:spring/spring-dao.xml"})
public class test {
    @Autowired
    private EmplopyeeDao emplopyeeDao;
    @Test
    public void testInsert(){
        Employee employee = new Employee();
        employee.setLastName("東方不敗");
        employee.setEmail("dfbb@163.com");
        employee.setGender(1);
        employee.setAge(20);
        emplopyeeDao.insert(employee);
        //mybatisplus會自動把當(dāng)前插入對象在數(shù)據(jù)庫中的id寫回到該實(shí)體中
        System.out.println(employee.getId());
    }
}

執(zhí)行添加操作,直接調(diào)用insert方法傳入實(shí)體即可。

2吐句、update操作:

@Test
public void testUpdate(){
        Employee employee = new Employee();
        employee.setId(1);
        employee.setLastName("更新測試");
        //emplopyeeDao.updateById(employee);//根據(jù)id進(jìn)行更新胁后,沒有傳值的屬性就不會更新
        emplopyeeDao.updateAllColumnById(employee);//根據(jù)id進(jìn)行更新,沒傳值的屬性就更新為null
}

注:注意這兩個(gè)update操作的區(qū)別嗦枢,updateById方法攀芯,沒有傳值的字段不會進(jìn)行更新,比如只傳入了lastName文虏,那么age侣诺、gender等屬性就會保留原來的值;updateAllColumnById方法氧秘,顧名思義年鸳,會更新所有的列,沒有傳值的列會更新為null丸相。
3搔确、select操作:

(1)、根據(jù)id查詢:

Employee employee = emplopyeeDao.selectById(1);

(2)灭忠、根據(jù)條件查詢一條數(shù)據(jù):

Employee employeeCondition = new Employee();
employeeCondition.setId(1);
employeeCondition.setLastName("更新測試");
//若是數(shù)據(jù)庫中符合傳入的條件的記錄有多條膳算,那就不能用這個(gè)方法,會報(bào)錯
Employee employee = emplopyeeDao.selectOne(employeeCondition);

注:這個(gè)方法的sql語句就是where id = 1 and last_name = 更新測試弛作,若是符合這個(gè)條件的記錄不止一條涕蜂,那么就會報(bào)錯。

(3)映琳、根據(jù)查詢條件返回多條數(shù)據(jù):
當(dāng)符合指定條件的記錄數(shù)有多條時(shí)机隙,上面那個(gè)方法就會報(bào)錯,就應(yīng)該用這個(gè)方法萨西。

Map<String,Object> columnMap = new HashMap<>();
columnMap.put("last_name","東方不敗");//寫表中的列名
columnMap.put("gender","1");
List<Employee> employees = emplopyeeDao.selectByMap(columnMap);
System.out.println(employees.size());

注:查詢條件用map集合封裝黍瞧,columnMap,寫的是數(shù)據(jù)表中的列名原杂,而非實(shí)體類的屬性名印颤。比如屬性名為lastName,數(shù)據(jù)表中字段為last_name穿肄,這里應(yīng)該寫的是last_name年局。selectByMap方法返回值用list集合接收。
(4)咸产、通過id批量查詢:

List<Integer> idList = new ArrayList<>();
idList.add(1);
idList.add(2);
idList.add(3);
List<Employee> employees = emplopyeeDao.selectBatchIds(idList);
System.out.println(employees);

注:把需要查詢的id都add到list集合中矢否,然后調(diào)用selectBatchIds方法,傳入該list集合即可脑溢,該方法返回的是對應(yīng)id的所有記錄僵朗,所有返回值也是用list接收赖欣。

(5)、分頁查詢:

List<Employee> employees = emplopyeeDao.selectPage(new Page<>(1,2),null);
System.out.println(employees);

注:selectPage方法就是分頁查詢验庙,在page中傳入分頁信息顶吮,后者為null的分頁條件,這里先讓其為null粪薛,講了條件構(gòu)造器再說其用法悴了。這個(gè)分頁其實(shí)并不是物理分頁,而是內(nèi)存分頁违寿。也就是說湃交,查詢的時(shí)候并沒有l(wèi)imit語句。等配置了分頁插件后才可以實(shí)現(xiàn)真正的分頁藤巢。
4搞莺、delete操作:

(1)、根據(jù)id刪除:

emplopyeeDao.deleteById(1);

(2)掂咒、根據(jù)條件刪除:

Map<String,Object> columnMap = new HashMap<>();
columnMap.put("gender",0);
columnMap.put("age",18);
emplopyeeDao.deleteByMap(columnMap);

注:該方法與selectByMap類似腮敌,將條件封裝在columnMap中,然后調(diào)用deleteByMap方法俏扩,傳入columnMap即可,返回值是Integer類型弊添,表示影響的行數(shù)录淡。

(3)、根據(jù)id批量刪除:

 List<Integer> idList = new ArrayList<>();
 idList.add(1);
 idList.add(2);
 emplopyeeDao.deleteBatchIds(idList);

注:該方法和selectBatchIds類似油坝,把需要刪除的記錄的id裝進(jìn)idList嫉戚,然后調(diào)用deleteBatchIds,傳入idList即可澈圈。

四彬檀、全局策略配置:

通過上面的小案例我們可以發(fā)現(xiàn),實(shí)體類需要加@TableName注解指定數(shù)據(jù)庫表名瞬女,通過@TableId注解指定id的增長策略窍帝。實(shí)體類少倒也無所謂,實(shí)體類一多的話也麻煩诽偷。所以可以在spring-dao.xml的文件中進(jìn)行全局策略配置坤学。

<!-- 5、mybatisplus的全局策略配置 -->
<bean id="globalConfiguration" class="com.baomidou.mybatisplus.entity.GlobalConfiguration">
        <!-- 2.3版本后报慕,駝峰命名默認(rèn)值就是true深浮,所以可不配置 -->
        <!--<property name="dbColumnUnderline" value="true"/>-->
        <!-- 全局主鍵自增策略,0表示auto -->
        <property name="idType" value="0"/>
        <!-- 全局表前綴配置 -->
        <property name="tablePrefix" value="tb_"/>
</bean>

這里配置了還沒用眠冈,還需要在sqlSessionFactory中注入配置才會生效飞苇。如下:

<!-- 3、配置mybatisplus的sqlSessionFactory -->
<bean id="sqlSessionFactory" class="com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="configLocation" value="classpath:mybatis-config.xml"/>
        <property name="typeAliasesPackage" value="com.zhu.mybatisplus.entity"/>
        <!-- 注入全局配置 -->
        <property name="globalConfig" ref="globalConfiguration"/>
</bean>

如此一來,實(shí)體類中的@TableName注解和@TableId注解就可以去掉了布卡。

五雨让、條件構(gòu)造器(EntityWrapper):

以上基本的 CRUD 操作,我們僅僅需要繼承一個(gè) BaseMapper 即可實(shí)現(xiàn)大部分單表 CRUD 操作羽利。BaseMapper 提供了多達(dá) 17 個(gè)方法供使用, 可以極其方便的實(shí)現(xiàn)單一宫患、批量、分頁等操作这弧,極大的減少開發(fā)負(fù)擔(dān)娃闲。但是mybatis-plus的強(qiáng)大不限于此,請看如下需求該如何處理:
需求:
我們需要分頁查詢 tb_employee 表中匾浪,年齡在 18~50 之間性別為男且姓名為 xx 的所有用戶皇帮,這時(shí)候我們該如何實(shí)現(xiàn)上述需求呢?
使用MyBatis : 需要在 SQL 映射文件中編寫帶條件查詢的 SQL,并用PageHelper 插件完成分頁. 實(shí)現(xiàn)以上一個(gè)簡單的需求蛋辈,往往需要我們做很多重復(fù)單調(diào)的工作属拾。
使用MP: 依舊不用編寫 SQL 語句,MP 提供了功能強(qiáng)大的條件構(gòu)造器 ------ EntityWrapper冷溶。

接下來就直接看幾個(gè)案例體會EntityWrapper的使用渐白。

1、分頁查詢年齡在18 - 50且gender為0逞频、姓名為tom的用戶:

List<Employee> employees = emplopyeeDao.selectPage(new Page<Employee>(1,3),
     new EntityWrapper<Employee>()
        .between("age",18,50)
        .eq("gender",0)
        .eq("last_name","tom")
);

注:由此案例可知纯衍,分頁查詢和之前一樣,new 一個(gè)page對象傳入分頁信息即可苗胀。至于分頁條件襟诸,new 一個(gè)EntityWrapper對象,調(diào)用該對象的相關(guān)方法即可基协。between方法三個(gè)參數(shù)歌亲,分別是column、value1澜驮、value2陷揪,該方法表示column的值要在value1和value2之間;eq是equals的簡寫杂穷,該方法兩個(gè)參數(shù)鹅龄,column和value,表示column的值和value要相等亭畜。注意column是數(shù)據(jù)表對應(yīng)的字段扮休,而非實(shí)體類屬性字段。
2拴鸵、查詢gender為0且名字中帶有老師玷坠、或者郵箱中帶有a的用戶:

List<Employee> employees = emplopyeeDao.selectList(
                new EntityWrapper<Employee>()
               .eq("gender",0)
               .like("last_name","老師")
                //.or()//和or new 區(qū)別不大
               .orNew()
               .like("email","a")
);

注:未說分頁查詢蜗搔,所以用selectList即可,用EntityWrapper的like方法進(jìn)行模糊查詢八堡,like方法就是指column的值包含value值樟凄,此處like方法就是查詢last_name中包含“老師”字樣的記錄;“或者”用or或者orNew方法表示兄渺,這兩個(gè)方法區(qū)別不大缝龄,用哪個(gè)都可以,可以通過控制臺的sql語句自行感受其區(qū)別挂谍。

3叔壤、查詢gender為0,根據(jù)age排序口叙,簡單分頁:

List<Employee> employees = emplopyeeDao.selectList(
                new EntityWrapper<Employee>()
                .eq("gender",0)
                .orderBy("age")//直接orderby 是升序炼绘,asc
                .last("desc limit 1,3")//在sql語句后面追加last里面的內(nèi)容(改為降序,同時(shí)分頁)
);

注:簡單分頁是指不用page對象進(jìn)行分頁妄田。orderBy方法就是根據(jù)傳入的column進(jìn)行升序排序俺亮,若要降序,可以使用orderByDesc方法疟呐,也可以如案例中所示用last方法脚曾;last方法就是將last方法里面的value值追加到sql語句的后面,在該案例中启具,最后的sql語句就變?yōu)閟elect ······ order by desc limit 1, 3本讥,追加了desc limit 1,3所以可以進(jìn)行降序排序和分頁。
4富纸、分頁查詢年齡在18 - 50且gender為0、姓名為tom的用戶:
條件構(gòu)造器除了EntityWrapper旨椒,還有Condition晓褪。用Condition來處理一下這個(gè)需求:

 List<Employee> employees = emplopyeeDao.selectPage(
                new Page<Employee>(1,2),
                Condition.create()
                        .between("age",18,50)
                        .eq("gender","0")
 );

注:Condition和EntityWrapper的區(qū)別就是,創(chuàng)建條件構(gòu)造器時(shí)综慎,EntityWrapper是new出來的涣仿,而Condition是調(diào)create方法創(chuàng)建出來。

5示惊、根據(jù)條件更新:

@Test
public void testEntityWrapperUpdate(){
        Employee employee = new Employee();
        employee.setLastName("蒼老師");
        employee.setEmail("cjk@sina.com");
        employee.setGender(0);
        emplopyeeDao.update(employee,
                new EntityWrapper<Employee>()
                .eq("last_name","tom")
                .eq("age",25)
        );
}

注:該案例表示把last_name為tom好港,age為25的所有用戶的信息更新為employee中設(shè)置的信息。
6米罚、根據(jù)條件刪除:

emplopyeeDao.delete(
        new EntityWrapper<Employee>()
        .eq("last_name","tom")
        .eq("age",16)
);

注:該案例表示把last_name為tom钧汹、age為16的所有用戶刪除。

總結(jié):

以上便是mybatis-plus的入門教程录择,介紹了其如何與spring整合拔莱、通用crud的使用碗降、全局策略的配置以及條件構(gòu)造器的使用,但是這并不是MP的所有內(nèi)容塘秦,其強(qiáng)大不限于此讼渊。避免篇幅過長,想了解mybatis-plus的更多用法請參考《mybatis-plus的使用 ------ 進(jìn)階》尊剔,同時(shí)在文末會給出案例的源碼爪幻。

以上內(nèi)容屬于個(gè)人筆記整理,如有錯誤须误,歡迎批評指正挨稿!
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市霹期,隨后出現(xiàn)的幾起案子叶组,更是在濱河造成了極大的恐慌,老刑警劉巖历造,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件甩十,死亡現(xiàn)場離奇詭異,居然都是意外死亡吭产,警方通過查閱死者的電腦和手機(jī)侣监,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來臣淤,“玉大人橄霉,你說我怎么就攤上這事∫亟” “怎么了姓蜂?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長医吊。 經(jīng)常有香客問我钱慢,道長,這世上最難降的妖魔是什么卿堂? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任束莫,我火速辦了婚禮,結(jié)果婚禮上草描,老公的妹妹穿的比我還像新娘览绿。我一直安慰自己,他們只是感情好穗慕,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布饿敲。 她就那樣靜靜地躺著,像睡著了一般逛绵。 火紅的嫁衣襯著肌膚如雪诀蓉。 梳的紋絲不亂的頭發(fā)上栗竖,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天,我揣著相機(jī)與錄音渠啤,去河邊找鬼狐肢。 笑死,一個(gè)胖子當(dāng)著我的面吹牛沥曹,可吹牛的內(nèi)容都是我干的份名。 我是一名探鬼主播,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼妓美,長吁一口氣:“原來是場噩夢啊……” “哼僵腺!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起壶栋,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤辰如,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后贵试,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體琉兜,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年毙玻,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了豌蟋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,731評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡桑滩,死狀恐怖梧疲,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情运准,我是刑警寧澤幌氮,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布牧牢,位于F島的核電站烈疚,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏谴麦。R本人自食惡果不足惜听哭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一慢洋、第九天 我趴在偏房一處隱蔽的房頂上張望塘雳。 院中可真熱鬧陆盘,春花似錦、人聲如沸败明。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽妻顶。三九已至酸员,卻和暖如春蜒车,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背幔嗦。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工酿愧, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人邀泉。 一個(gè)月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓嬉挡,卻偏偏與公主長得像,于是被迫代替她去往敵國和親汇恤。 傳聞我的和親對象是個(gè)殘疾皇子庞钢,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 前言: mybatis在持久層框架中還是比較火的,一般項(xiàng)目都是基于ssm因谎。雖然mybatis可以直接在xml中通過...
    貪挽懶月閱讀 1,019,047評論 63 386
  • 前言: 關(guān)于mybatis-plus的簡介以及基本使用基括,我在《mybatis-plus的使用 ------ 入門》...
    貪挽懶月閱讀 161,699評論 58 178
  • 03_Mybatis-Plus入門CRUD 通用的CRUD(入門DEMO) 提出問題:假設(shè)我們已經(jīng)存在一張tbl_...
    頑強(qiáng)的小彈殼閱讀 1,601評論 0 4
  • MyBatis是目前最流行的JDBC持久層框架,著名的ssm框架中的m财岔。關(guān)于springboot集成mybatis...
    郭藝賓閱讀 1,204評論 0 2
  • 今天繼續(xù)看村上春樹的《當(dāng)我談跑步時(shí)我談些什么》使鹅。經(jīng)常有人會問揪阶,村上春樹,跑步時(shí)你思考什么呢患朱? 村上春樹在這本書當(dāng)中...
    婉琳閱讀 216評論 2 2