mysql 插件开发_Mybatis插件自动开发

本文介绍了如何使用Mybatis Generator插件自动生成MySQL数据库的POJO实体类、Mapper映射文件和DAO接口。通过配置Maven插件,详细步骤包括创建项目、导入依赖、配置核心文件、生成代码以及Mapper代理开发。讨论了命名规范,并指出生成的代码已满足Mapper代理的条件,简化了DAO实现。最后展示了测试代码和解决资源文件打包问题的方法。
摘要由CSDN通过智能技术生成

第一步:创建项目,导入依赖

mysql

mysql-connector-java

5.1.34

org.mybatis

mybatis

3.4.5

org.mybatis

mybatis-spring

1.3.1

org.mybatis.caches

mybatis-ehcache

1.1.0

org.mybatis.generator

mybatis-generator-core

1.3.5

添加 插件: 自动生成插件 在plugins 标签内部加入

org.mybatis.generator

mybatis-generator-maven-plugin

1.3.5

true

true

需要把标签单独移除,不被它管理。

查询配置成功的显示:

91eea45265bb

image.png

第二步:创建核心配置文件

直接拷贝之前的核心配置文件即可

第三步:自动生成POJO实体类和Mapper映射文件+DAO接口

配置插件:插件模板文件,固定写法,用模板generatorConfig.xml修改。

手动创建resources目录,转化为资源文件目录。

模板文件必须放入: src\main\resources 这个目录not resource

文件名称不修改:generatorConfig.xml

这里选择不生成Example类

enableCountByExample="false"

enableDeleteByExample="fales"

enableSelectByExample="false"

enableUpdateByExample="false">

选择的表必须有主键。

这里选择字段带下划线的表:

91eea45265bb

image.png

*********************************注意***********************************************

工作中字段命名规范:

1)全小写,单词组合[hostname,hostip,hostaddr]

2)全小写,单词之间加下划线。[host_name,host_ip,host_addr]

3)不要使用关键子,数据库的函数名称。[password,sum,desc,asc]

上下文配置关键项:

jdbcConnection ---数据库链接URL、用户名、密码

javaModelGenerator---生成模型的包名和位置,就是entity 类。

sqlMapGenerator ---生成的映射文件包名和位置,就是sql 语句映射。

javaClientGenerator---生成DAO的包名和位置,就是dao 接口。

table---这个配置项是配置在项目中操作的数据库表

tableName表名, domainObjectName实体名

Mybatis也属于ORM框架(半自动):对象关系型映射

Hibernate是全自动的ORM框架

MYSQL:属于关系型数据库

Java :面向对象编程语言

ORM:使用面向对象的思想来操作数据库。

让程序员操作数据库养成面向对象编程的方式操作。

配置插件自动生成:

方式一:(了解)

在Intellij IDEA添加一个”Run运行”选项,使用maven运行mybatis-generator-maven-plugin插件

添加Maven运行选项:

Working directory选择具体的模块项目;

在 “Command line” 选项中输入mybatis-generator:generate -e加”-e”选项是让该插件输出详细信息,帮助我们定位问题。只能点击生成一次:

91eea45265bb

image.png

选中与点击:

91eea45265bb

image.png

注意:只能点击一次。

生成结果:

91eea45265bb

image.png

注册实体mapper映射文件

方式二(掌握):

插件视图直接点击

91eea45265bb

image.png

或者

91eea45265bb

image.png

同样只能生成一次,再次点击配置文件内容会重复(****Mapper.xml)。

注册实体:

91eea45265bb

image.png

注意:这里的mapper配置文件放在java目录中,默认Idea是不认的。

第四步:Mapper代理开发DAO

最终框架整合后是不需要开发DAO实现类?

观察自动生成代码(Mapper代理)的现象:

插件方式完成CRUD后,对比Mapper代理方式:

Mapper dao接口全路径名要和mapper映射文件的namespace值一致。

Mapper dao接口方法名称要和mapper映射文件的statement的id一致。

Mapper dao接口方法参数类型要和mapper映射文件的parameterType的值一致,而且它的参数是一个。

mapper接口方法返回值类型要和mapper映射文件的resultType的值一致。

自动生成就符合上面的条件。

分析:

满足条件一:

使用Mapper代理方式不可以自定义路径。

这个路径和DAO接口的全路径一致。

91eea45265bb

image.png

满足条件二:Mapper的id:

91eea45265bb

image.png

91eea45265bb

image.png

Id和DAO接口中的方法名称一致

满足条件三:参数:

91eea45265bb

image.png

91eea45265bb

image.png

参数也是一致的。

满足条件四:返回类型:

91eea45265bb

image.png

91eea45265bb

image.png

返回类型也一致。

注册实体:Idea默认不能认java目录中的配置文件。

91eea45265bb

image.png

bug:

91eea45265bb

image.png

打包确认bug:

91eea45265bb

image.png

问题:

91eea45265bb

image.png

普通jar项目打包默认只加载resources中的资源文件,mapper中的映射文件需要处理:

加入resources节点加载非资源目录中的资源文件

在 pom.xml 文件里面加入资源文件的配置:

src/main/resources

src/main/java

/.properties

/.xml

false

当我们使用idea的时候总会发现有编译版本的问题 原因在于不同的模块的编译版本不同 ,所以会导致编译问题 所以我们在这里统一使用编译插件:

org.apache.maven.plugins

maven-compiler-plugin

3.1

1.8

1.8

UTF-8

结果:

91eea45265bb

image.png

打包install到本地仓库确认

91eea45265bb

image.png

打包成功 解压 jar包 观察所生成的文件是否是全的。

如下图所示:所有的文件都是全的 ,

*******************所以千万不要忘记加入资源文件的依赖。*********************

91eea45265bb

image.png

测试代码如下所示:

public class TestDao {

@Test

public void testInsert(){

SqlSession sqlSession = SqlSessionFactoryUtilSingleL.getSqlSession();

UserInfoMapper mapper = sqlSession.getMapper(UserInfoMapper.class);

UserInfo userInfo =new UserInfo();

userInfo.setuName("張穎好");

userInfo.setuPass("是個好人");

mapper.insert(userInfo);

sqlSession.commit();

sqlSession.close();

}

/**

* 当我们测试 修改的时候 当我们不给 id 值得时候 发现并不能更新所有的数据

* 但是如果我们在数据里面使用 update 语句的时候 可以修改整个表的所有数据

/

@Test

public void testUpdate(){

SqlSession sqlSession = SqlSessionFactoryUtilSingleL.getSqlSession();

UserInfoMapper mapper = sqlSession.getMapper(UserInfoMapper.class);

UserInfo userInfo=new UserInfo();

userInfo.setuName("名字");

userInfo.setuPass("密码");

userInfo.setuId(1l);

mapper.updateByPrimaryKey(userInfo);

sqlSession.commit();

sqlSession.close();

}

@Test

public void testDelete(){

SqlSession sqlSession = SqlSessionFactoryUtilSingleL.getSqlSession();

UserInfoMapper mapper = sqlSession.getMapper(UserInfoMapper.class);

mapper.deleteByPrimaryKey(1L);

sqlSession.commit();

sqlSession.close();

}

/*

* 现在的查询只能根据id 进行查询 但是不能动态的查询所有的记录

*/

@Test

public void testQuery(){

SqlSession sqlSession = SqlSessionFactoryUtilSingleL.getSqlSession();

UserInfoMapper mapper = sqlSession.getMapper(UserInfoMapper.class);

UserInfo userInfo = mapper.selectByPrimaryKey(1l);

System.out.println(userInfo.getuName()+"\t"+userInfo.getuPass());

}

}

上面注释列出来了问题 所以需要注意。

观察Dao 里面有两个特定的方法并没有被调用 ,这两个方法有什么不同吗?

这两个方法的作用?

91eea45265bb

image.png

insertSelective 动态添加:可以任意添加一个字段

updateByPrimaryKeySelective 动态更新:可以任意修改一个字段

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值