图文详解mybatis+postgresql平台搭建步骤

网友投稿 296 2023-07-11


图文详解mybatis+postgresql平台搭建步骤

从头开始搭建一个mybatis+postgresql平台

最近有个项目的数据库使用postgresql,使用原生态的mybatis操作数据,原生态的没什么不好,只不过国内有个tk.mybatis的工具帮助我们做了很多实用的事情,大多数情况下我们需要在原生态mybatis上加工的想法它基本上都已经有很好的实现,这篇将分享安装postgresql,配置tk.mybatis的详细步骤以及在这过程中可能遇到的一些小问题。

安装postgresql,执行下面的命令就可以安装了:

复制代码 代码如下:

apt-get update && apt-get install postgresql

服务端安装好之后我们还需要一个图形界面的客户端pdAdmin,我安装的是Windows版本的postgresql自带的,可以到这个地XhaRAp址找对应的版本。安装成功后默认会创建一个系统用户,一个数据库用户,名称以及密码都是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,足够简单(只需要继承通过mapper接口)

复制代码 代码如下:

public interface ProductMapper extends Mapper {}

插件,这里有分页插件,SQL性能分析插件等,与mybatis集成非常容易。

如何与spring集成?

生成器的集成,可以采用maven方式来运行代码生成器

依赖的包

org.mybatis

mybatis

${mybatis.version}

org.mybatis

mybatis-spring

${mybatis.spring.version}

org.mybatis.generator

mybatis-generator-core

${MBG.version}

compile

true

com.github.pagehelper

pagehelper

${pagehelper.version}

tk.mybatis

mapper

${mapper.version}

javax.persistence

persistence-api

1.0

org.postgresql

postgresql

9.3-1102-jdbc41

配置生成器插件,指定配置文件路径,配置依赖:一个是数据库驱动,一个是通用mapper

org.mybatis.generator

mybatis-generator-maven-plugin

${MBG.version}

${basedir}/src/main/resources/generator/generatorConfig.xml

true

true

org.postgresql

postgresql

9.3-1102-jdbc41

tk.mybatis

mapper

${mapper.version}

生成器配置文件

**配置数据库连接

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

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

注意下targetRuntime,这里采用的是MyBatis3Simple,它的默认选项是MyBatis3。如果采用通用mapper,我们在spring扫描接口时可以这样写。

复制代码 代码如下:

如果是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)

生成器的配置详细如下:

复制代码 代码如下:

配置maven运行参数,如下图所示即可。

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

dialect=postgresql

reasonable=true

supportMethodsArguments=true

returnPageInfo=check

params=count=countSql

dialect=postgresql

reasonable=true

supportMethodsArguments=true

returnPageInfo=check

params=count=countSql

通用mapper的用法:

• mapper,所有生成的mapper就继承于Mapper,默认持有通用mapper所有接口,包含CRUD常见操作

• IService,通用mapper接口的定义,我们可以根据自己的业务修改此接口

@Service

public interface IService {

T selectByKey(Object key);

int save(T entity);

int delete(Object key);

int updateAll(T entity);

int updateNotNull(T entity);

List selectByExample(Object example);

//TODO 其他...

}

BaseService,通用mapper的实现类

public abstract class BaseService implements IService {

@Autowired

protected Mapper mapper;

public Mapper 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 selectByExample(Object example) {

return mapper.selectByExample(example);

}

//TODO 其他...

}

具体服务类

@Service

public class ProductServiceImpl extends BaseService implements ProductService {

@Override

public List 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://mybatis.tk/

2、https://github.com/abel533/Mybatis-Spring


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:java web开发之实现购物车功能
下一篇:checkbox 选中一个另一个checkbox也会选中的实现代码
相关文章

 发表评论

暂时没有评论,来抢沙发吧~