笔者在实践ssm+pgsql的过程中遇到一些坑,特意作文,以免后人被坑。
1. 关于pgsql在框架中的使用,首先就是解决用工具自动生成mapper.xml和实体类,
这张图片上的内容都能下载到,不做过多解释,主要还是 genertorConfig_mysql.xml文件的更改,
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" >
<generatorConfiguration >
<classPathEntry
location="postgresql.jar" />
<context id="jqtek" >
<commentGenerator>
<property name="suppressDate" value="false"/>
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="false"/>
</commentGenerator>
<jdbcConnection
driverClass="org.postgresql.Driver"
connectionURL="jdbc:postgresql://postgresql01.public.test.baozun.cn:5432/db_ehr"
userId="user_ehr" password="user_ehr" />
<!-- mybatis里专门用来处理NUMERIC和DECIMAL类型的策略 -->
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<javaModelGenerator targetPackage="com.xx.entity" targetProject="MyGent\java">
<property name="trimStrings" value="true" />
</javaModelGenerator>
<sqlMapGenerator targetPackage="com.xx.mapping" targetProject="MyGent\resources">
</sqlMapGenerator>
<javaClientGenerator targetPackage="com.baozun.dao" targetProject="MyGent\java" type="XMLMAPPER">
</javaClientGenerator>
<!-- 配置生成的实体类不需要辅助的examplateModel -->
<table tableName="tb_user" enableCountByExample="false" enableUpdateByExample="false"
enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false">
<generatedKey column="id" sqlStatement="PostgreSql" identity="true" />
</table>
</context>
</generatorConfiguration>
****************************bat 批处理文件的书写(随便写的 txt文件,然后将后缀改成.bat)
del /f /q /s MyGent
java -jar mybatis-generator-core-1.3.1.jar -configfile generatorConfig_mysql.xml
pause
******************************************************************************************************
2. 当生成了 mapper,xml文件时,由于pgsql和oracle一样,没有自增的主键,所以需要自己先在数据库去自定义一个自增的 序列
CREATE TABLE "public"."tb_user" (
"id" int4 DEFAULT nextval('test_c_id_seq'::regclass) NOT NULL,
"user_name" varchar(25) COLLATE "default",
"user_password" varchar(25) COLLATE "default",
CONSTRAINT "tb_user_pkey" PRIMARY KEY ("id")
)
WITH (OIDS=FALSE)
;
- CREATE SEQUENCE test_c_id_seq
- START WITH 1
- INCREMENT BY 1
- NO MINVALUE
- NO MAXVALUE
- CACHE 1;
- alter table tb_user alter column id set default nextval('test_c_id_seq');
****************************************************************************************
具体在mapper.xml中写法就是
<insert id="insert" parameterType="com.baozun.entity.TbUser" >
<selectKey resultType="java.lang.Integer" keyProperty="id" order="BEFORE" >
SELECT nextval('test_c_id_seq')
</selectKey>
insert into tb_user (user_name, user_password)
values (#{userName,jdbcType=VARCHAR}, #{userPassword,jdbcType=VARCHAR})
</insert>
*******************************************************************************************************
关于mybatis的分页插件的使用
先在pom.xml中 引入jar包
<pagehelper.version>3.4.2</pagehelper.version>
<mybatis.paginator.version>1.2.15</mybatis.paginator.version>
<dependency>
<groupId>com.github.miemiedev</groupId>
<artifactId>mybatis-paginator</artifactId>
<version>${mybatis.paginator.version}</version>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>${pagehelper.version}</version>
</dependency>
***********************
在mybatis-config.xml中配置分页插件,
<!-- 配置分页插件 -->
<plugins>
<plugin interceptor="com.github.pagehelper.PageHelper">
<!-- 设置数据库类型Oracle,MySQL,MarinDBName,SQLite,PostareSQL六种数据库 -->
<property name="dialect" value="postgresql"/>
</plugin>
</plugins>
具体使用就是在 controller 或者其他,
PageHelper.startPage(item.getPageIndex(),item.getPageSize());
List<TbUser> userList = userService.getUserList();
PageInfo<TbUser> pageInfo=new PageInfo<TbUser>(userList);
*******************************************************************************************************
对于 springMVC中的@RequestBody,前端如果是 使用的 ajax传值,那么是一定要写消息头,而且一定要将
传入的数据和 声明的一定要保持一致,
function displayModule(){
$("#dislist").show();
var params = {"pageSize":3,"pageIndex":1,"orgsId":"2"};
$.ajax({
type:"POST",
url:"/User/userlistByAjax",
contentType:"application/json",
dataType:"json",
data:JSON.stringify(params),
success:function(data){
var flag=data.flag;
var msg=data.msg;
if(flag==true){
var itemList=data.object;
$.each(itemList,function(i,item){
$("#hidenTd").append(
'<tr>' +
'<td>'+item.id+'</td>' +
'<td>' +item.userName+'</td>' +
'<td><a href="/User/'+item.id+'/delete" >删除</a></td>' +
'<td><a href="/User/'+item.id +'/detail">详细</a></td>' +
' </tr>' ) ;
});
}else{
alert(msg);
}
alert("成功");
},
error:function(e) {
alert("出错:"+e);
}
});
}
我在前台接受可以直接使用 内部静态类 @RequestBody UserService.GetUserAndOrgsInfo item
public interface UserService{
List<Map> selectMap(Map map);
static class GetUserAndOrgsInfo extends RequestBase{
public int orgsId;
}
}
***********内部静态类的属性必须和传入的键值保持一致,
*******************************************************************************************************
使用mybatis时,实现复杂查询,那么就是 传入是Map ,传出是List<Map>
dao层: List<Map> selectByName(Map map);
.xml层 : <select id="selectByName" parameterType="java.util.HashMap" resultType="java.util.HashMap">
SELECT * from
tb_user a
where a.user_name=#{mapName}
</select>
controller使用: Map map=new HashMap();
map.put("mapName","名字1");
************************************************************************************