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

本文共 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

你可能感兴趣的文章
电视尺寸与观看距离对应表
查看>>
小明历险记:规则引擎drools教程一
查看>>
MPLS LDP随堂笔记2
查看>>
国内下载golang.org/x/net
查看>>
数据库索引原理及优化
查看>>
20151223关于共享池4x-SQL内存结构父子游标
查看>>
Spirng+SpringMVC+Maven+Mybatis+MySQL项目搭建(转)
查看>>
从头开始学JavaScript (九)——执行环境和作用域
查看>>
ConcurrentHashMap中的2的n次方幂上舍入方法(转)
查看>>
HDOJ/HDU 2087 剪花布条(indexOf()应用~~)
查看>>
JavaScript使用自定义事件实现简单的模块化开发
查看>>
正确把控seo优化工作流程
查看>>
如何利用【百度地图API】,制作房产酒店地图?(上)——制作自定义标注和自定义信息窗口...
查看>>
CES后遗症:物联网设备数据安全问题成焦点
查看>>
联手云计算核心技术开发,BoCloud与中科院软件所战略合作
查看>>
2017年背景下的SSD选购技巧有哪些变化?
查看>>
2016年的数据存储和管理的成本将何去何从?
查看>>
Airpods 并非无用,而是苹果借助语音交互布局物联网的新“棋子”
查看>>
项目总结:数据迁移测试
查看>>
你有足够的勇气改变不良的数据习惯吗?
查看>>