JavaEE三层架构:表现层,业务层,持久层。
mybatis-config.xml 保存连接池的核心配置文件
SQL语句也是抽取到了配置文件里面。
mybatis几乎免除了JDBC代码,以及设置参数和结果集的工作。
mybatis-config.xml里面配置连接数据库的相关文件。
配置 加载SQL映射文件。
再编写一个SQL映射文件。
命名方式一般是 :表名+Mapper.xml。
图中:id是本条SQL的唯一标识,result Type 是数据的返回类型,这里是User。
然后在mybatis-config.xml文件里面,的mappers标签里面添加一个mapper
这个mapper 的resource属性,就是刚刚填写的UserMapper.xml。项目启动时就会加载这个SQL映射文件。
在实体类里面也就是pojo类里面要写上user表种对应的字段成员属性,以及相关的getter和setter方法,(可以实用@Date注解 来进行简化代码 但是要添加lombok 的jar包 里面包含getter和setter方法和 各种构造方法,以及toString方法)。
然后开始加载核心配置文件获取SQLSessionFactory:
然后获取sqlsession 对象用来执行SQL:
然后执行SQL:
sqlSession.selectList("名称空间+SQL标识Id")
然后执行的SQL结果就都封装在users这个对象里面。
然后再释放资源:
sqlSession.close();
开启Mapper代理:
1》》》定义一个与Sql映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一个目录下
定义一个接口:其中定义的接口要与相关的配置文件要在同一个层级目录下,也就是说在resource下面要建立一个与Java包下一样的层级目录。
2》》》设置SQL映射文件的namespace属性为Mapper接口全限定名。
3》》》在Mapper接口中定义方法,方法名就是SQL映射文件中的SQL语句的Id,并保持参数类型和返回类型一致。
4》》》实用Mapper代理就不用获取sqlsession,只用获取UserMapper接口的代理对象
可以开启包扫描的方式来管理:在mybatis-config.xml中添加:
包扫描路径:
由此来代替 <mapper>的配置
mybatis的核心配置文件 mybatis-config.xml:
<environment> 配置不同环境的数据库,可以配置不同的数据源,配置多个environment。
<typeAliases>标签下可以进行配置别名。
在里面添加 <package> 包扫描路径
1.编写接口和方法,
2。在对应的xml文件中编写相应的SQL,
3.编写相应的执行方法。
1:获取sqlsessionFactory对象(固定写法)
2:获取sqlSession对象
3:获取Mapper接口的代理对象。
4.通过sqlSession进行获取brandMapper对象,再调用相应的接口方法,把结果返回进行输出
5.释放资源:
数据库表的字段名称与实体类的属性名称不一致则不能自动封装数据。
//1:起别名 :对于实体类属性与数据库字段名不一样的情况,可以让别名与实体类里面的相同
(但是这种方式十分不方便)
2:可以添加sql标签,
但是也有缺点,就是十分的不灵活。
采用resultMap就能灵活的解决这个问题。
<resultMap >里面的Id 是起 名字,type要和下面的对应上, 里面的result 的两个属性值,对应的是字段名,和实体类里面的属性名。
参数占位符:
1:#{ }会将参数替换为? 为了防止出现SQL注入
2:¥{ } SQL语句得拼接,会出现这SQL注入得情况
特殊字符得处理:例如< 1:可以采用转义字符 <来代替,2:采用CDATA区的解决办法
条件查询:
在使用条件查询时,如果有多条件的情况,就使用@param注解,@param("字段名")数据类型 +属性名....
或者 采用实体对象,
mybatis 会找到对应的getter,setter方法进行传递
或者采用Map数据类型进行封装,但是键值要与占位符名要一致
编写 sql:
再Mapper接口里面写上对应方法:
查询-多条件-动态查询 动态SQL: 采用<if>标签实现动态SQL
<if>标签:用来进行条件判断
test:编写对应的逻辑表达式
<where> 可以用于解决 SQL语法的相关问提,例如 在SQL拼接时,多余的and语句。
查询-单条件-动态查询:
添加:
再进行添加操作之后 要进行实物的提交 :sqlsession.commit();
或者开启自动事物提交,在获取 sqlsession时 在openSession()里面跟上true
将 useGeneratedKeys=“true” keyProperty="Id的属性名称"获取相应的主键ID
修改-动态sql:
在采用动态SQL进行修改时,为了防止这个不同的条件导致SQL语句发生错误,推荐使用set标签进行编写:
删除:
在进行批量删除的时候,可以采用<foreach>标签,进行遍历。 其中collection属性 在遍历数组时 ,默认将数组变换成一个map,默认名为array , 或者采用@Param进行传参,就可用数组名
separator属性 是对遍历后的结果进行 分割 这里采用逗号分隔
mybatis-数据传输:
mybatis的注解开发:
除去了 对xml文件的配置,直接在xxxMapper接口里面的方法上进行编写SQL语句: