转载自 http://blog.csdn.net/zdtao/article/details/49474557

今天,主要向大家分享下如何从头搭建一个最简单的mybatis项目

下载地址

Mybatis3 最新下载地址:https://github.com/mybatis/mybatis-3/releases

一, 创建配置文件

在新建的project的src目录下,新建mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><settings><setting name="mapUnderscoreToCamelCase" value="true"/><setting name="lazyLoadingEnabled" value="true"/></settings><typeAliases><typeAlias type="com.test.entity.Employee" alias="Employee"/><typeAlias type="com.test.entity.Customer" alias="Customer"/></typeAliases><environments default="local"><environment id="local"><transactionManager type="JDBC"></transactionManager><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/orcl"/><property name="username" value="username"/><property name="password" value="password"/></dataSource></environment></environments><mappers><mapper resource="com/test/data/employee-mapper.xml"/><mapper resource="com/test/data/customer-mapper.xml"/></mappers>
</configuration>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34

接下来为大家解释下该配置文件中的内容

1. settings 
定义mybatis的一些全局设置,这里 配置的两个属性

mapUnderscoreToCamelCase: 在映射database column名字和entity属性名时,自动将带下划线column名转化为常见的java驼峰形式属性名 
lazyLoadingEnabled: 延迟加载entity的关联属性

2. typeAlias 
定义java类型的别名,比如这里分别将com.yun.entity.Employee和com.yun.entity.Customer设置别名为Employee,Customer。这样在别处配置文件中使用 它们时,就不必再指明带package全名。

3. environments 
主要用于配置数据源 
可以配置多个environment,以用于不同的产品环境,这里只配置一个用于测试,并定义id为“local”

transactionManager: 有两种类型 
1, JDBC : 使用从数据源返回的连接管理commit和rollback 
2, MANAGED : 依靠容器来管理transaction

dataSource: 有3种类型 
1, UNPOOLED :每次请求新打开连接,用完后关闭连接 
2, POOLED : 使用连接池管理连接 
3, JNDI :使用容器管理datasource时使用

4. mappers 
简而言之,mapper文件用于定义sql语句,以及与其对应的entity 
以employee-mapper.xml为例,以下是其简单实现:

<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.test.data.EmployeeMapper"><select id="selectAllEmployee" resultType="Employee">select * from employee</select><select id="selectEmployeeById" parameterType="long" resultType="Employee">select * from employee where employee_id=#{id}</select></mapper>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

这里,我们定义了2句sql statement,分别是

selectAllEmployee: 查找所有employee 
selectEmployeeById:根据id查找特定employee

返回结果类型均为Employee(看!这里typeAlias就起到作用了,不需要指明class全名),区别在于前者是个List。

这里大家可能会对selectEmployeeById 中的#{id}感到疑惑,别急,下面会为您介绍。

NOTE:配置文件中的顺序不能乱来,对于例子中的几个配置,要按照顺序来定义:settings -> typeAliases -> environments -> mappers.因为mybatis是按照一个固定顺序来解析这个配置文件的,如果顺序不对,加载时会报错。

二,获得SqlSession

不赘述,直接上代码

public class MySqlSession {private static String mybatisResource = "mybatis-config.xml";private static SqlSessionFactory sqlSessionFactory;public static SqlSessionFactory getSqlSessionFactory() {try {if (sqlSessionFactory == null) {InputStream inputStream = Resources.getResourceAsStream(mybatisResource);sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);}return sqlSessionFactory;} catch (IOException e) {throw new RuntimeException(e);}}public static SqlSession newSqlSession() {SqlSession session = getSqlSessionFactory().openSession();return session;}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

通过调用MySqlSession.newSqlSession()即可获得一个SQLSession对象,这也是mybatis中最核心的类了,负责各种select,update,delete接口等,这里就不详细解释了。

三,DAO

马上就到最后一步啦! 
还是直接上代码~

public class BatisEmployeeDao {public List<Employee> getAllEmployees() {SqlSession session = MySqlSession.newSqlSession();try {List<Employee> ret = session.selectList("selectAllEmployee");return ret;} finally {session.close();}}public Employee getEmployeeById(Long id) {SqlSession session = MySqlSession.newSqlSession();try {Employee employee = session.selectOne("selectEmployeeById", id);return employee;} finally {session.close();}}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

看到这里,想必各位看官也知道前面#{id}的value是哪里来的了,是的,它就是 getEmployeeById(Long id)中的参数,但两者名字不要求一致哦。

好了,到这里,一个最简单的mybatis配置和实现已经结束了,希望对您有所帮助。 
更多细节参看mybatis官方文档:http://mybatis.github.io/mybatis-3/

Mybatis基本配置和搭建相关推荐

  1. SSM框架搭建(四) springmvc和mybatis的配置

    SSM框架搭建(一) JDK和MAVEN环境搭建 SSM框架搭建(二) 创建MAVEN项目 SSM框架搭建(三) 数据库创建和MyBatis生成器自动生成实体类.DAO接口和Mapping映射文件 S ...

  2. 万事开头难!最新MyBatis程序配置教程(IDEA版)

    目录 1.搭建实验数据库 2.IDEA新建项目,连接数据库 3.编写MyBatis核心配置文件 4.编写MyBatis工具类 5.创建表对应实体类 6.编写Mapper接口 7.编写Mapper.xm ...

  3. Mybatis入门:1(Mybatis框架的环境搭建)

    Mybatis框架的环境搭建 一.创建maven工程并导入坐标 导入坐标: <dependencies><dependency><groupId>org.mybat ...

  4. Spring+SpringMVC+MyBatis深入学习及搭建(十)——MyBatis逆向工程

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6973266.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(九)--My ...

  5. Spring+SpringMVC+MyBatis深入学习及搭建(十一)——SpringMVC架构

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6985816.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(十)--My ...

  6. Spring+SpringMVC+MyBatis深入学习及搭建(十七)——SpringMVC拦截器

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7098753.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(十六)--S ...

  7. Spring+SpringMVC+MyBatis深入学习及搭建(十四)——SpringMVC和MyBatis整合

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7010363.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(十三)--S ...

  8. mysql mybatis 工具类_我肝了一个星期,为你们整理出了mybatis程序配置教程

    1.搭建实验数据库 我们创建一个mybatis实验数据库,并创建一个user表为后续实验准备 2.IDEA新建项目,连接数据库 新建一个普通的maven项目 删除src目录,作为父工程 pom.xml ...

  9. springmvc与mysql实例_Spring+Mybatis+SpringMVC+Maven+MySql搭建实例

    摘要:本文主要讲了如何使用Maven来搭建Spring+Mybatis+SpringMVC+MySql的搭建实例,文章写得很详细,有代码有图片,最后也带有运行的效果. 一.准备工作 1. 首先创建一个 ...

最新文章

  1. 实现跨浏览器html5表单验证
  2. python爬虫代码1000行-简单用14行代码写一个Python代理IP的爬虫
  3. CentOS查看CPU、内存、版本等系统信息
  4. cpc卡内计费信息异常包括_妈妈网广告投放怎么做、妈妈网广告|妈妈网信息流广告投放有哪些计费方式?...
  5. js函数提示 vscode_为VSCode / Monaco Intellisence添加JavaScript类型提示
  6. SQL SERVER 中identity
  7. 浅谈 TypeScript【上】-- Flow 静态类型检查工具
  8. python生成yaml_使用python脚本自动生成K8S-YAML的方法示例
  9. js能调用c语言吗,如何从Javascript调用Object-C?
  10. linux获取打开串口失败的原因,linux – 从串口读取失败
  11. 个人地理数据库与文件地理数据库的区别
  12. python-基础-面向对象2-异常-模块工厂模式
  13. 运动控制加减速算法(一)
  14. CATIA V6二次开发——宏应用
  15. 关于6月20日PMP认证考试准考信下载及考场规定的通知
  16. uniapp ucharts统计图表
  17. RS232与TTL的区别
  18. 20个Mac软件下载常用的经典网站
  19. 信息学奥赛一本通 1196:踩方格 | OpenJudge NOI 2.6 4982:踩方格
  20. mysql中chr_Chr()和chrb()的含义

热门文章

  1. cocos2d-x游戏实例(25)-简易动作游戏(3)
  2. 关于UAC执行级别的研究
  3. WebRTC 的 AudioSource/AudioTrack
  4. 非VIP用户下载限速,原来是这么实现的
  5. JAVA 泛型中的通配符 T,E,K,V,?
  6. DevOps工程师到底是做什么的?
  7. Highly Available (Mirrored) Queues
  8. Python中的网络编程之TCP
  9. 高效终端设备视觉系统开发与优化
  10. 腾讯开源负责人许勇:未来开源计划重点是AI和服务小程序生态