最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

圖文詳解mybatis+postgresql平臺(tái)搭建步驟

 更新時(shí)間:2016年07月10日 08:57:45   作者:min.jiang  
從頭開(kāi)始搭建一個(gè)mybatis+postgresql平臺(tái),這篇文章主要介紹了圖文詳解mybatis+postgresql平臺(tái)搭建步驟,感興趣的小伙伴們可以參考一下

從頭開(kāi)始搭建一個(gè)mybatis+postgresql平臺(tái)

最近有個(gè)項(xiàng)目的數(shù)據(jù)庫(kù)使用postgresql,使用原生態(tài)的mybatis操作數(shù)據(jù),原生態(tài)的沒(méi)什么不好,只不過(guò)國(guó)內(nèi)有個(gè)tk.mybatis的工具幫助我們做了很多實(shí)用的事情,大多數(shù)情況下我們需要在原生態(tài)mybatis上加工的想法它基本上都已經(jīng)有很好的實(shí)現(xiàn),這篇將分享安裝postgresql,配置tk.mybatis的詳細(xì)步驟以及在這過(guò)程中可能遇到的一些小問(wèn)題。

安裝postgresql,執(zhí)行下面的命令就可以安裝了:

復(fù)制代碼 代碼如下:
apt-get update && apt-get install postgresql

服務(wù)端安裝好之后我們還需要一個(gè)圖形界面的客戶端pdAdmin,我安裝的是Windows版本的postgresql自帶的,可以到這個(gè)地址找對(duì)應(yīng)的版本。安裝成功后默認(rèn)會(huì)創(chuàng)建一個(gè)系統(tǒng)用戶,一個(gè)數(shù)據(jù)庫(kù)用戶,名稱以及密碼都是postgres,我們可以新創(chuàng)建用戶也可以直接使用這個(gè)帳號(hào),反正我這只是測(cè)試。安裝完成之后,可能會(huì)遇到遠(yuǎn)程訪問(wèn)問(wèn)題:

遠(yuǎn)程連接問(wèn)題,默認(rèn)情況下只允許本地連接,要想允許其它客戶端連接,我們可以修改它的配置文件,這個(gè)文件的目錄位于/etc/postgresql/9.5/main,這個(gè)目錄下有兩個(gè)文件:
1:postgresql.conf,這個(gè)是服務(wù)器相關(guān),里面有一個(gè)listen_address的地址,默認(rèn)只監(jiān)聽(tīng)本地,我們可以修改它。


2:pg_hba.cof,這個(gè)是用戶權(quán)限相關(guān),里面有一個(gè)與連接相關(guān)的配置,可以配置成網(wǎng)關(guān)模式

成功連接之后,大概是這個(gè)樣子,我們可以創(chuàng)建數(shù)據(jù)庫(kù),表等對(duì)象。

mybatis代碼生成器,數(shù)據(jù)庫(kù)與Model的映射,這類機(jī)械的工作應(yīng)該交給機(jī)器來(lái)完成,詳細(xì)使用參考這里。

通用mapper,單表的CRUD操作可以抽像出一個(gè)公共接口,tk.mybatis提供的通用mapper可以幫助我們解決這類問(wèn)題。

----mapper.xml,足夠?。ㄖ话侄斡成洌?/strong>

<mapper namespace="com.jim.logstashmvc.dao.generated.mapper.ProductMapper">
 <resultMap id="BaseResultMap" type="com.jim.logstashmvc.dao.generated.entity.Product">
 <!--
  WARNING - @mbggenerated
 -->
 <id column="id" jdbcType="BIGINT" property="id" />
 <result column="name" jdbcType="VARCHAR" property="name" />
 </resultMap>
</mapper>

----mapper,足夠簡(jiǎn)單(只需要繼承通過(guò)mapper接口)

復(fù)制代碼 代碼如下:
public interface ProductMapper extends Mapper<Product> {}

插件,這里有分頁(yè)插件,SQL性能分析插件等,與mybatis集成非常容易。

如何與spring集成?

生成器的集成,可以采用maven方式來(lái)運(yùn)行代碼生成器

依賴的包

<!-- MyBatis -->
  <dependency>
   <groupId>org.mybatis</groupId>
   <artifactId>mybatis</artifactId>
   <version>${mybatis.version}</version>
  </dependency>

  <!-- Spring集成 -->
  <dependency>
   <groupId>org.mybatis</groupId>
   <artifactId>mybatis-spring</artifactId>
   <version>${mybatis.spring.version}</version>
  </dependency>

  <!-- MBG -->
  <dependency>
   <groupId>org.mybatis.generator</groupId>
   <artifactId>mybatis-generator-core</artifactId>
   <version>${MBG.version}</version>
   <scope>compile</scope>
   <optional>true</optional>
  </dependency>

  <!-- 分頁(yè) -->
  <dependency>
   <groupId>com.github.pagehelper</groupId>
   <artifactId>pagehelper</artifactId>
   <version>${pagehelper.version}</version>
  </dependency>

  <!-- 通用Mapper -->
  <dependency>
   <groupId>tk.mybatis</groupId>
   <artifactId>mapper</artifactId>
   <version>${mapper.version}</version>
  </dependency>

  <!-- TkMybatis 會(huì)使用到JPA的注解 -->
  <dependency>
   <groupId>javax.persistence</groupId>
   <artifactId>persistence-api</artifactId>
   <version>1.0</version>
  </dependency>

  <dependency>
   <groupId>org.postgresql</groupId>
   <artifactId>postgresql</artifactId>
   <version>9.3-1102-jdbc41</version>
  </dependency>

配置生成器插件,指定配置文件路徑,配置依賴:一個(gè)是數(shù)據(jù)庫(kù)驅(qū)動(dòng),一個(gè)是通用mapper

<!--MBG-->
   <plugin>
    <groupId>org.mybatis.generator</groupId>
    <artifactId>mybatis-generator-maven-plugin</artifactId>
    <version>${MBG.version}</version>
    <configuration>
     <configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xml</configurationFile>
     <overwrite>true</overwrite>
     <verbose>true</verbose>
    </configuration>
    <dependencies>
     <dependency>
      <groupId>org.postgresql</groupId>
      <artifactId>postgresql</artifactId>
      <version>9.3-1102-jdbc41</version>
     </dependency>

     <dependency>
      <groupId>tk.mybatis</groupId>
      <artifactId>mapper</artifactId>
      <version>${mapper.version}</version>
     </dependency>

    </dependencies>
   </plugin>

生成器配置文件

**配置數(shù)據(jù)庫(kù)連接

**配置生成的model,mapper以及mapper.xml的存放路徑

**配置需要生成的表信息

注意下targetRuntime,這里采用的是MyBatis3Simple,它的默認(rèn)選項(xiàng)是MyBatis3。如果采用通用mapper,我們?cè)趕pring掃描接口時(shí)可以這樣寫(xiě)。

復(fù)制代碼 代碼如下:
<bean> <property name="sqlSessionFactoryBeanName" value="jimSqlSessionFactory"/> <property name="basePackage" value="com.jim.logstashmvc.dao.generated.mapper"/> </bean>

如果是MyBatis3,生成的mapper.xml格式會(huì)復(fù)雜很多,我之前遇到過(guò)這樣的問(wèn)題:使用MyBatis3生成的mapper.xml然后錯(cuò)誤 的配置了MapperScannerConfigurer為下面通用mapper模式,提示我的錯(cuò)誤如下,原因可以認(rèn)定是配置問(wèn)題(不是某個(gè)mapper.xml中的id重復(fù)問(wèn)題) ,后續(xù)再研究下非通用mapper的配置。

復(fù)制代碼 代碼如下:
Caused by: java.lang.IllegalArgumentException: Mapped Statements collection already contains value for com.jim.logstashmvc.dao.generated.mapper.ProductMapper.selectByExampleat org.apache.ibatis.session.Configuration$StrictMap.put(Configuration.java:837)at org.apache.ibatis.session.Configuration$StrictMap.put(Configuration.java:809)

生成器的配置詳細(xì)如下:

復(fù)制代碼 代碼如下:
<generatorConfiguration> <properties resource="config.properties"/> <context targetRuntime="MyBatis3Simple" defaultModelType="flat"> <property name="beginningDelimiter" value="`"/> <property name="endingDelimiter" value="`"/> <plugin type="${mapper.plugin}"> <property name="mappers" value="${mapper.Mapper}"/> </plugin> <jdbcConnection driverClass="${jdbc.driverClass}" connectionURL="${jdbc.url}" userId="${jdbc.username}" password="${jdbc.password}"> </jdbcConnection> <javaModelGenerator targetPackage="${targetModelPackage}" targetProject="${targetJavaProject}"/> <sqlMapGenerator targetPackage="mapper" targetProject="${targetResourcesProject}"/> <javaClientGenerator targetPackage="${targetMapperPackage}" targetProject="${targetJavaProject}" type="XMLMAPPER"> </javaClientGenerator> <table tableName="product" domainObjectName="Product"></table> </context></generatorConfiguration>
配置maven運(yùn)行參數(shù),如下圖所示即可。

mybatis的集成,主要是配置連接池信息,插件,mapper掃描等信息。

<bean id="jimDataSource" class="org.apache.commons.dbcp.BasicDataSource">
  <property name="driverClassName" value="${jdbc.driverClass}"/>
  <property name="url" value="${jdbc.url}"/>
  <property name="username" value="${jdbc.username}"/>
  <property name="password" value="${jdbc.password}"/>

  <property name="initialSize" value="5"/>
  <property name="minIdle" value="10"/>
  <property name="maxWait" value="60000"/>
  <property name="timeBetweenEvictionRunsMillis" value="60000"/>
  <property name="minEvictableIdleTimeMillis" value="3600000"/>
  <property name="validationQuery" value="SELECT 1"/>
  <property name="testWhileIdle" value="true"/>
  <property name="testOnBorrow" value="false"/>
  <property name="testOnReturn" value="false"/>
 </bean>

 <bean id="jimSqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  <property name="dataSource" ref="jimDataSource"/>
  <property name="mapperLocations" value="classpath:mapper/*.xml"/>
  <property name="typeAliasesPackage" value="com.jim.logstashmvc.dao.generated.entity"/>
  <property name="plugins">
   <array>
    <bean class="com.github.pagehelper.PageHelper">
     <property name="properties">
      <value>
      dialect=postgresql
      reasonable=true
      supportMethodsArguments=true
      returnPageInfo=check
      params=count=countSql
     </value>

     </property>
    </bean>
   </array>
  </property>

 </bean>

 <bean class="tk.mybatis.spring.mapper.MapperScannerConfigurer">
  <property name="sqlSessionFactoryBeanName" value="jimSqlSessionFactory"/>
  <property name="basePackage" value="com.jim.logstashmvc.dao.generated.mapper"/>
 </bean>

通用mapper的用法:

• mapper,所有生成的mapper就繼承于Mapper<T>,默認(rèn)持有通用mapper所有接口,包含CRUD常見(jiàn)操作
• IService,通用mapper接口的定義,我們可以根據(jù)自己的業(yè)務(wù)修改此接口 

@Service
public interface IService<T> {

 T selectByKey(Object key);

 int save(T entity);

 int delete(Object key);

 int updateAll(T entity);

 int updateNotNull(T entity);

 List<T> selectByExample(Object example);

 //TODO 其他...
} 

BaseService,通用mapper的實(shí)現(xiàn)類 

public abstract class BaseService<T> implements IService<T> {

 @Autowired
 protected Mapper<T> mapper;

 public Mapper<T> getMapper() {
  return mapper;
 }

 @Override
 public T selectByKey(Object key) {
  return mapper.selectByPrimaryKey(key);
 }

 public int save(T entity) {
  return mapper.insert(entity);
 }

 public int delete(Object key) {
  return mapper.deleteByPrimaryKey(key);
 }

 public int updateAll(T entity) {
  return mapper.updateByPrimaryKey(entity);
 }

 public int updateNotNull(T entity) {
  return mapper.updateByPrimaryKeySelective(entity);
 }

 public List<T> selectByExample(Object example) {
  return mapper.selectByExample(example);
 }

 //TODO 其他...
} 

具體服務(wù)類 

@Service
public class ProductServiceImpl extends BaseService<Product> implements ProductService {
 @Override
 public List<Product> selectByProduct(Product product, int page, int rows) {
  Example example = new Example(Product.class);
  Example.Criteria criteria = example.createCriteria();
  if(!StringUtils.isBlank(product.getName())){
   criteria.andEqualTo("name",product.getName());
  }
  if (product.getId() != null) {
   criteria.andEqualTo("id", product.getId());
  }
  PageHelper.startPage(page, rows);
  return selectByExample(example);

 }

}

安裝postgresql并且成功遠(yuǎn)程連接,集成MBG生成mapper以及model,然后將mybatis與spring集成,最后通過(guò)通用mapper中聯(lián)起來(lái)就達(dá)到了我們的目的:通過(guò)少量的代碼完成大部分的工作,重復(fù)勞動(dòng)交給工具完成。但通用mapper有它的優(yōu)點(diǎn)也就有它的缺點(diǎn),需要根據(jù)項(xiàng)目環(huán)境來(lái)平衡,個(gè)人感覺(jué)利大于弊。


本文引用:
1、http://www.mybatis.tk/
2、https://github.com/abel533/Mybatis-Spring

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java常見(jiàn)的3種文件上傳方法和速度對(duì)比

    Java常見(jiàn)的3種文件上傳方法和速度對(duì)比

    這篇文章介紹了Java常見(jiàn)的3種文件上傳方法和速度對(duì)比,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • Spring 動(dòng)態(tài)代理實(shí)現(xiàn)代碼實(shí)例

    Spring 動(dòng)態(tài)代理實(shí)現(xiàn)代碼實(shí)例

    這篇文章主要介紹了Spring 動(dòng)態(tài)代理實(shí)現(xiàn)代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Java實(shí)現(xiàn)的兩個(gè)線程同時(shí)運(yùn)行案例

    Java實(shí)現(xiàn)的兩個(gè)線程同時(shí)運(yùn)行案例

    這篇文章主要介紹了Java實(shí)現(xiàn)的兩個(gè)線程同時(shí)運(yùn)行,涉及java多線程相關(guān)操作與使用技巧,需要的朋友可以參考下
    2019-07-07
  • Java反射機(jī)制詳解

    Java反射機(jī)制詳解

    Java的反射機(jī)制是在運(yùn)行狀態(tài)中,對(duì)于任何一個(gè)類,都可以知道這個(gè)類的所有屬性和方法,對(duì)于任何一個(gè)對(duì)象,都可以調(diào)用它所有的方法和屬性,修改部分類型信息。本文就來(lái)詳細(xì)講講Java反射機(jī)制的使用
    2022-07-07
  • springboot使用Mybatis-plus分頁(yè)插件的案例詳解

    springboot使用Mybatis-plus分頁(yè)插件的案例詳解

    這篇文章主要介紹了springboot使用Mybatis-plus分頁(yè)插件的相關(guān)知識(shí),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-05-05
  • Java輕松入門冒泡?選擇?插入?希爾?歸并排序算法

    Java輕松入門冒泡?選擇?插入?希爾?歸并排序算法

    這篇文章主要介紹了Java常用的排序算法及代碼實(shí)現(xiàn),在Java開(kāi)發(fā)中,對(duì)排序的應(yīng)用需要熟練的掌握,這樣才能夠確保Java學(xué)習(xí)時(shí)候能夠有扎實(shí)的基礎(chǔ)能力。那Java有哪些排序算法呢?本文小編就來(lái)詳細(xì)說(shuō)說(shuō)Java常見(jiàn)的排序算法,需要的朋友可以參考一下
    2022-02-02
  • 如何將SpringBoot項(xiàng)目打成?war?包并部署到Tomcat

    如何將SpringBoot項(xiàng)目打成?war?包并部署到Tomcat

    這篇文章主要介紹了如何將SpringBoot項(xiàng)目?打成?war?包?并?部署到?Tomcat,當(dāng)前環(huán)境是windows,tomcat版本是8.5采用的springboot版本是2.2.3,本文結(jié)合實(shí)例代碼給大家詳細(xì)講解需要的朋友可以參考下
    2022-11-11
  • Java中&和&&以及|和||的區(qū)別、應(yīng)用場(chǎng)景和代碼示例

    Java中&和&&以及|和||的區(qū)別、應(yīng)用場(chǎng)景和代碼示例

    這篇文章主要介紹了Java中的邏輯運(yùn)算符&、&&、|和||的區(qū)別,包括它們?cè)诓紶柡驼麛?shù)類型上的應(yīng)用,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-03-03
  • Java Bigdecimal使用原理詳解

    Java Bigdecimal使用原理詳解

    這篇文章主要介紹了Java Bigdecimal使用原理詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • SpringBoot工程下Lombok的應(yīng)用教程詳解

    SpringBoot工程下Lombok的應(yīng)用教程詳解

    這篇文章主要給大家介紹了關(guān)于SpringBoot工程下Lombok應(yīng)用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11

最新評(píng)論

宝清县| 鄯善县| 利辛县| 泗阳县| 武邑县| 日照市| 延庆县| 农安县| 海原县| 铜山县| 全州县| 磴口县| 兴城市| 宁远县| 富民县| 长宁区| 松江区| 吉林市| 宝山区| 广平县| 承德市| 成安县| 富源县| 会同县| 密山市| 宝坻区| 前郭尔| 泾阳县| 清镇市| 桦甸市| 剑河县| 遂平县| 青河县| 河源市| 北宁市| 垫江县| 修水县| 阜康市| 龙海市| 定边县| 连云港市|