Mybatis
一、依赖jar包:log4g,mybatis,数据库连接包
二、配置文件
除了Configuration之外还要配置log4g.properties
log4j.rootLogger=DEBUG,Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.org.apache=INFO
在实体类的xml文件中秩序配置好相应的sql语句,就可直接在方法中调用
例如:
注意:这里的resultType由于配置了别名,所以可以直接填写类名。同时使用resultType还需要一个前提条件,那就是实体类的属性名必须和数据库对应字段保持一致。
实体类xml中配置sql语句需要注意使用语句对应的标签。select语句使用select标签,update语句使用update标签等等。
配置语句时,如果sql语句中需要用到参数,需要配置parameterType,这里的类型要和方法中传来的类型一致,之后可以在语句中使用#{}EL表达式获取值
例如:
select多条件查询:
在使用之前的sql查询中,进行多条件查询一般需要进行参数的判断以及语句的拼接,在mybatis中,只需要使用where标签和if标签就可以自动实现sql的语句拼接。
if语句中的test判断:如果test中的值为真,则拼接if中的语句,为假则不拼接。
update语句中的自动拼接参数:
当不确定update语句中的参数个数时,可以使用
update user
username = #{username},
password = #{password},
where
id = #{id}
当拼接结束后,set标签会自动取出最后的逗号,使语句正确。
逻辑删除:
一般在开发中,数据库中的数据在删除时采用逻辑删除,逻辑删除就是给数据添加一个删除状态值,查询时要根据删除状态的默认值进行查询。这样执行删除时修改删除状态值就可以完成删除,数据不会被删除,在用户角度来说数据已经被删除。
update user
set
deleteId = 1
where
id = #{id}
模糊查询:
mybatis中在使用模糊查询时,如果是用#{}获取参数,不能直接在sql语句上拼接%(_),需要在传参时在参数中拼接完%(_)后在传入到sql语句中。或者使用${}来进行字符串的拼接,这时,可以直接在sql语句上拼接%,但是不能忘记单引号
例如:
除了这两种方法,还可以使用
使用foreach标签对传入的集合参数进行遍历拼接
上面说了使用resultType的方式来将查询结果封装到对象中,但是这种方式在使用上有局限性,就是必须保证对象属性名和字段名一致,这时,我们可以使用resultMap来进行实体类和表字段的映射,从而解决这种问题
mybatis中的多关系映射
一对一(方式一):
在resultMap使用association标签表示该对象中的对象属性,javaType中填写的是这个属性的类型,在这个标签中使用子标签配置属性对象的映射关系。
一对一(方式二):
这种方式配置的一对一是一种嵌套查询,在查询出一个student实例后,由于
一对多:
实现一对多映射需要在类上设置好对应的对象集合属性,然后在映射文件的resultMap中通过collection标签进行配置。
配置的方式有两种:
一种是通过链表查询直接将两张表的数据查询出来,然后将副表的字段在collection标签内进行映射,此时需要设置使用哪个类的对象来接收对应结果集字段,设置不再使用association中使用的javaType,而是使用ofType。
另一种方式是通过collection标签设置select属性和column属性,在对本条记录进行映射时,会以column属性的值为参数进行子查询,并将子查询的结果集映射成我们的实体类对象。组装成集合后再赋值到对应的睡醒上,完成一条记录的映射后循环进行下一条记录的组装。
方式一:
方式二:
多对多查询:
多对多关系要使用一个中间表来维护量表的外键,查询时使用三表查询