在上一篇mybtis的web项目中,我们最后有一个问题没有解决,就是dao的实现类,其代码很类似,只是具体执行的sql语句不同,那么我们是否可以只编写dao的接口,而不用编写其具体实现类呢?
当然可以,mybaits已经二次封装了javassist来帮助我们自动生成实现类。
但是如果我们要使用这一机制,就要注意:
。这有助于我们使用javassist这一辅助工具生成代理类是其可以帮助我们自动去实现接口的方法,并且调用我们自己编写的sql语句。
1、首先 导入mybatis mysql logback junit依赖
2、写pojo 类
3、写mapper接口
4、写工具类 获得session
5、写mapper.xml文件
6、写mybaits.xml
比如 我们需要根据汽车类型来查询汽车
如果使用${}
则会报错 
如果使用#{}
则正确.
使用#{}

错误,因为会先预编译,在赋值,这时候 会将其作为一个字符串常量传进去,但是是错误的 decs 是一个关键字,加上’’会变成字符串常量,sql语句会出错。
使用${}

此时是拼接,正确。
比如我们每次都returnType 上 都需要写全限定类名,很麻烦,我们可以采用别名机制。

在mybatis.xml文件中 配置
有三种方式
①对某个类 自己起别名
②对某个类采用默认别名机制
③对包下的类都采用默认别名机制
SQL映射文件的配置方式包括四种:
● resource:从类路径中加载
● url:从指定的全限定资源路径中加载
● class:使用映射器接口实现类的完全限定类名
● package:将包内的映射器接口实现全部注册为映射器
有个前提:
如果使用这种方式必须满足以下条件:
● SQL映射文件和mapper接口放在同一个目录下。
● SQL映射文件的名字也必须和mapper接口名一致。gpt 教程

虽然在不同的地方,其实都是在根路径下,java和resources打包后最后都在同一个目录下。

将包内的映射器接口实现全部注册为映射器 ,这种方式条件和第三种一样。
注意
在resources下只能创建目录 不能创建包
不能使用com.cky.Mapper 的方式 这样其实还是一个一级目录。
应该使用com/cky/Mapper 这是创建多级目录。
比如我们的mybatis配置文件和 xxxMapper.xml,我们可以配置模板文件,方便创建。
举例:


不需要我们自己设置主键 而是mybaits帮我们自动生成 并且返回给我们。

虽然我们插入的car id为null,但是当我们再次获取输出car时我们可以看到其id是有值的,
useGeneratedKeys=“true” 表示我们需要生成的主键值,keyProperty=“id” 代表将生成的主键值赋给id这个属性。此时当我们插入时,就会将自动生成的主键值赋给id,如果为false,则我们输出时car的id为null,虽然数据库中car的id是有值的,但是由于没有回显,输出就为null。
发布者:Ai探索者,转载请注明出处:https://javaforall.net/279564.html原文链接:https://javaforall.net
