博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mybatis初接触
阅读量:6811 次
发布时间:2019-06-26

本文共 8097 字,大约阅读时间需要 26 分钟。

mybatis 是一个数据库操作的持久层框架,能够执行普通的 SQL 查询,消除了几乎所有的 jdbc 代码和参数的手工设置,取而代之的是较为简洁的 XML 文件或注解,总的来说是一个优秀的数据库操作框架。

mybatis 的初步使用

1、引入 mybatis 的相关 jar 包 或者依赖注入

org.mybatis
mybatis
3.2.6
mysql
mysql-connector-java
5.0.5

2、建立 mybatis-configuration.xml 文件

可以看到,mybatis-configuration.xml 主要是配置了事物管理器和数据库的连接设置。

3、创建一个实例类,类与所需获取的表中的要查询的字段一一对应,以一个 survey 表为例, 这个表总共有如下这些字段

@Data@NoArgsConstructorpublic class SurveyBean {    public String questId;    public String sceneId;    public String surveyId;    public String name;    public String version;    public String seq;    public String type;    public String required;    public String createTime;}

 

4、创建一个操作 survey 表的的 xml 文件 surveyMapper.xml

UPDATE survey_quest SET quest_name = #{name}, version = #{version} WHERE quest_id = #{questId}

 

5、添加 mapper 文件到 mybatis-configuration.xml 文件

6、编写测试文件

public class SurveyMapperTest {    SqlSession session;    @Before    public void beforeLoadXml() {         InputStream inputStream = SurveyMapperTest.class.                getClassLoader().getResourceAsStream("mybatis-configuration.xml");                SqlSessionFactory sqlSessionFactory =                new SqlSessionFactoryBuilder().build(inputStream);               session = sqlSessionFactory.openSession();    }    @Test    public void testSelect() {        String statement = "com.study.hugy.surveyMapper.selectAllSurvey";        List
bean = session.selectList(statement); session.close(); } @Test public void testSelectByCondition () { String statement = "com.study.hugy.surveyMapper.selectByCondition"; String id = "101"; List
beans = session.selectList(statement, id); session.close(); } @Test public void testUpdateByCondition () { String statement = "com.study.hugy.surveyMapper.updateByCondition"; SurveyBean bean = new SurveyBean(); bean.setQuestId("101"); bean.setName("这是测试哦"); bean.setVersion("321"); session.update(statement, bean); session.commit(); session.close(); }}

 

以上基本就可以将 mybatis 使用起来了,附上项目的目录文件结构

 

插个题外话,如何使用 log4j 在控制台打印 mybatis 要执行的SQL?

1) 添加依赖

log4j
log4j
1.2.17

  

2)新建  log4j.properties 文件

### Log4j配置 ###### 与Spring结合需要在web.xml中指定此文件位置,并添加监听器 ####定义log4j的输出级别和输出目的地(目的地可以自定义名称,和后面的对应)#[ level ] , appenderName1 , appenderName2log4j.rootLogger=DEBUG,console,file#-----------------------------------##1 定义日志输出目的地为控制台log4j.appender.console = org.apache.log4j.ConsoleAppenderlog4j.appender.console.Target = System.outlog4j.appender.console.Threshold=DEBUG####可以灵活地指定日志输出格式,下面一行是指定具体的格式 ####%c: 输出日志信息所属的类目,通常就是所在类的全名#%m: 输出代码中指定的消息,产生的日志具体信息#%n: 输出一个回车换行符,Windows平台为"/r/n",Unix平台为"/n"输出日志信息换行log4j.appender.console.layout = org.apache.log4j.PatternLayoutlog4j.appender.console.layout.ConversionPattern=[%c]-%m%n#-----------------------------------##2 文件大小到达指定尺寸的时候产生一个新的文件log4j.appender.file = org.apache.log4j.RollingFileAppender#日志文件输出目录log4j.appender.file.File=log/tibet.log#定义文件最大大小log4j.appender.file.MaxFileSize=10mb###输出日志信息####最低级别log4j.appender.file.Threshold=ERRORlog4j.appender.file.layout=org.apache.log4j.PatternLayoutlog4j.appender.file.layout.ConversionPattern=[%p][%d{yy-MM-dd}][%c]%m%n#-----------------------------------##3 druidlog4j.logger.druid.sql=INFOlog4j.logger.druid.sql.DataSource=infolog4j.logger.druid.sql.Connection=infolog4j.logger.druid.sql.Statement=infolog4j.logger.druid.sql.ResultSet=info#4 mybatis 显示SQL语句部分log4j.logger.org.mybatis=DEBUG#log4j.logger.cn.tibet.cas.dao=DEBUG#log4j.logger.org.mybatis.common.jdbc.SimpleDataSource=DEBUG##log4j.logger.org.mybatis.common.jdbc.ScriptRunner=DEBUG##log4j.logger.org.mybatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG##log4j.logger.java.sql.Connection=DEBUGlog4j.logger.java.sql=DEBUGlog4j.logger.java.sql.Statement=DEBUGlog4j.logger.java.sql.ResultSet=DEBUGlog4j.logger.java.sql.PreparedStatement=DEBUG

3)在 web.xml 添加监听

org.springframework.web.util.Log4jConfigListener

4)在  mybatis-configuration.xml 中使用 log4j

注意一点 mybatis-configuration.xml 中添加的标签是有顺序的,顺序错误会导致加载此配置文件报错。 然后再来看看如何使用注解来实现 mybatis 的使用。 步骤 1,2,3 不变,有变化是从第四步开始, 使用注解需要 XxxMapper.xml 文件, 取而代之的是一个 interface --- XxxMapper
public interface SurveyMapper {    @Select("SELECT * FROM survey_quest")    List
selectAllQuest(); @Select("SELECT * FROM survey_quest WHERE quest_id = #{id}") List
selectByCondition(String id); @Select("UPDATE survey_quest SET quest_name = #{name}, version=#{version} WHERE quest_id = #{questId}") void updateByCondition(SurveyBean bean);}

然后在 mybatis-configuration.xml 文件中注册此 mapper 类 

<mapper class = "com.study.hugy.mapper.SurveyMapper"/>

使用的话,如下所示:

@Test    public void selectAllSurvey () {        SurveyMapper mapper = session.getMapper(SurveyMapper.class);        List
list = mapper.selectAllQuest(); session.close(); } @Test public void selectByCondition() { SurveyMapper mapper = session.getMapper(SurveyMapper.class); List
list = mapper.selectByCondition("101"); session.close(); } @Test public void updateByCondition () { SurveyMapper mapper = session.getMapper(SurveyMapper.class); SurveyBean bean = new SurveyBean(); bean.setQuestId("101"); bean.setName("这是注解啊"); bean.setVersion("321"); mapper.updateByCondition(bean); session.commit(); session.close(); }

了解了这些,mybatis 的就能使用起来了,总结一下需要注意的几点:

1、关于 sql 中参数的设置,如果只有一个,可以随意设置,但是如果有多个(一个实例类), sql 中的命名一定要与实例类的属性名称一致;

2、如果遇到乱码问题,检查页面的编码和数据库操作的编码是否一致,如页面使用的是 utf-8 ,添加数据库的 url 的时候可以在后面加上 ?useUnicode=true&amp;characterEncoding=utf-8;

3、就是上面提到过的 mybatis-configuration.xml 中标签的顺序问题,不要弄错,否则会报错的;

 

---- mybatis 进阶应用  动态 sql 问题

所谓的动态 sql ,就是根据不同的情况, 条件会发生变化的 sql 语句, 针对这种情况 mybatis 在 mapper.xml 文件中提供了一些标签来解决;

 

1、 if 标签

SELECT *FROM STUDENTWHERE1 = 1
AND STUDENT_ID = #{studentId}
AND STUDENT_NAME = #{studentName}

2、 foreach 标签

foreach 标签是一个循环用的标签,在传入的参数中有集合的时候使用, 可以将集合中的条目方便的取出

INSERT INTO STUDENT(STUDENT_ID, STUDENT_NAME)VALUES
(#{item.studentId}, #{item.studentName})

3、choose/when/otherwise

相当于 java 中的 if ... else if ... else

SELECT *FROM STUDENTWHERE1= 1
AND STUDENT_ID = #{studentId}
AND STUDNET_NAME = #{studentName}
AND STUDENT_AGE BETWEEN 1 AND 3

 

还有一些生成动态 sql 的标签,可以参考一下的网址:

也写一些使用时的注意事项吧:

使用 SqlSession 传参数的时候 如果参数是一个常量类型 在 sql 中可以直接使用 #{1} 之类的来调用

使用 SqlSession 传递引用类型的参数, sql 中能拿到的值一定是 此参数的属性值,比如 你传递了一个 STUDENT 对象 ,名为 zhangsan ,你在 sql 中使用 #{zhangsan.studentName} 是拿不到值的,必须使用  #{studentName}, 所以如果使用 foreach 标签做循环的时候,如果只是传入一个集合, 记得要将他封装一层,不然你是拿不到的(好麻烦) 

 

关于 mybatis 就讲到这里了。勤于学习,勤于总结!!!

 

转载于:https://www.cnblogs.com/hugystudy/p/8515979.html

你可能感兴趣的文章
Linux下修改Mysql的用户(root)的密码
查看>>
Spring.NET的AOP怎么玩
查看>>
Linux下配置Mysql允许远程访问详解
查看>>
nginx作为tcp代理 虚拟主机配置 模板
查看>>
超市购物小票案例
查看>>
file.src.rpm 使用方法的简单介绍
查看>>
如何恢复【cisco 3560】交换机的【密码】
查看>>
Map接口
查看>>
一步一步教你做ios推送
查看>>
DOCKER windows 7 详细安装教程
查看>>
Linux:-bash: ***: command not found
查看>>
用D盘做游戏菜单 省内存又省心
查看>>
全新Linux+Python高端运维班-Linux vim 末行模式,sed命令,基本bash脚本
查看>>
搭建局域网CentOS Yum服务器
查看>>
关于MySQL里的found_row()和row_count()解释及用法
查看>>
windows10除了自带的edge能上网,别的应用都不能上网
查看>>
DHCP通过NAP认证
查看>>
界面设计的8条黄金规则
查看>>
Python fabric
查看>>
Golang源码探索(二) 协程的实现原理
查看>>