程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 圖文詳解mybatis+postgresql平台搭建步調

圖文詳解mybatis+postgresql平台搭建步調

編輯:關於JAVA

圖文詳解mybatis+postgresql平台搭建步調。本站提示廣大學習愛好者:(圖文詳解mybatis+postgresql平台搭建步調)文章只能為提供參考,不一定能成為您想要的結果。以下是圖文詳解mybatis+postgresql平台搭建步調正文


從頭開端搭建一個mybatis+postgresql平台

比來有個項目標數據庫應用postgresql,應用原生態的mybatis操作數據,原生態的沒甚麼欠好,只不外國際有個tk.mybatis的對象贊助我們做了許多適用的工作,年夜多半情形下我們須要在原生態mybatis上加工的設法主意它根本上都曾經有很好的完成,這篇將分享裝置postgresql,設置裝備擺設tk.mybatis的具體步調和在這進程中能夠碰到的一些小成績。

裝置postgresql,履行上面的敕令便可以裝置了: apt-get update && apt-get install postgresql

辦事端裝置好以後我們還須要一個圖形界面的客戶端pdAdmin,我裝置的是Windows版本的postgresql自帶的,可以到這個地址找對應的版本。裝置勝利後默許會創立一個體系用戶,一個數據庫用戶,稱號和暗碼都是postgres,我們可以新創立用戶也能夠直接應用這個帳號,橫豎我這只是測試。裝置完成以後,能夠會碰到長途拜訪成績:

長途銜接成績,默許情形下只許可當地銜接,要想許可其它客戶端銜接,我們可以修正它的設置裝備擺設文件,這個文件的目次位於/etc/postgresql/9.5/main,這個目次下有兩個文件:
1:postgresql.conf,這個是辦事器相干,外面有一個listen_address的地址,默許只監聽當地,我們可以修正它。


2:pg_hba.cof,這個是用戶權限相干,外面有一個與銜接相干的設置裝備擺設,可以設置裝備擺設成網關形式

勝利銜接以後,年夜概是這個模樣,我們可以創立數據庫,表等對象。

mybatis代碼生成器,數據庫與Model的映照,這類機械的任務應當交給機械來完成,具體應用參考這裡。

通用mapper,單表的CRUD操作可以抽像出一個公共接口,tk.mybatis供給的通用mapper可以贊助我們處理這類成績。

----mapper.xml,足夠小(只包括字段映照)

<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,足夠簡略(只須要繼續經由過程mapper接口)

public interface ProductMapper extends Mapper<Product> {}

插件,這裡有分頁插件,SQL機能剖析插件等,與mybatis集成異常輕易。

若何與spring集成?

生成器的集成,可以采取maven方法來運轉代碼生成器

依附的包

<!-- 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>

  <!-- 分頁 -->
  <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 會應用到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>

設置裝備擺設生成器插件,指定設置裝備擺設文件途徑,設置裝備擺設依附:一個是數據庫驅動,一個是通用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>

生成器設置裝備擺設文件

**設置裝備擺設數據庫銜接

**設置裝備擺設生成的model,mapper和mapper.xml的寄存途徑

**設置裝備擺設須要生成的表信息

留意下targetRuntime,這裡采取的是MyBatis3Simple,它的默許選項是MyBatis3。假如采取通用mapper,我們在spring掃描接口時可以如許寫。

<bean> <property name="sqlSessionFactoryBeanName" value="jimSqlSessionFactory"/> <property name="basePackage" value="com.jim.logstashmvc.dao.generated.mapper"/> </bean>

假如是MyBatis3,生成的mapper.xml格局會龐雜許多,我之前碰到過如許的成績:應用MyBatis3生成的mapper.xml然後毛病 的設置裝備擺設了MapperScannerConfigurer為上面通用mapper形式,提醒我的毛病以下,緣由可以認定是設置裝備擺設成績(不是某個mapper.xml中的id反復成績) ,後續再研討下非通用mapper的設置裝備擺設。

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)

生成器的設置裝備擺設具體以下:

<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運轉參數,以下圖所示便可。

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>,默許持有通用mapper一切接口,包括CRUD罕見操作
• IService,通用mapper接口的界說,我們可以依據本身的營業修正此接口 

@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的完成類 

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 其他...
} 

詳細辦事類 

@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而且勝利長途銜接,集成MBG生成mapper和model,然後將mybatis與spring集成,最初經由過程通用mapper中聯起來就到達了我們的目標:經由過程大批的代碼完成年夜部門的任務,反復休息交給對象完成。但通用mapper有它的長處也就有它的缺陷,須要依據項目情況來均衡,小我感到利年夜於弊。


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

以上就是本文的全體內容,願望對年夜家的進修有所贊助,也願望年夜家多多支撐。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved