请注意后面文章中的注释
1
2
3
4
<code>1</code><code>. config:配置文件目录</code>
<code>2</code><code>. pojo:Bean类包</code>
<code>3</code><code>. controller:数据接口</code>
<code>4</code><code>. sql:数据库源文件</code>
<a href="http://s3.51cto.com/wyfs02/M01/49/CE/wKioL1Qa8lzCuQw_AADZPa0H6ng894.jpg" target="_blank"></a>
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<code>CREATE</code> <code>DATABASE</code> <code>IF </code><code>NOT</code> <code>EXISTS `mybatis`;</code>
<code>USE `mybatis`;</code>
<code>DROP</code> <code>TABLE</code> <code>IF EXISTS `users`;</code>
<code>CREATE</code> <code>TABLE</code> <code>`users` (</code>
<code> </code><code>`id` </code><code>int</code><code>(11) </code><code>NOT</code> <code>NULL</code> <code>AUTO_INCREMENT,</code>
<code> </code><code>`</code><code>name</code><code>` </code><code>varchar</code><code>(45) </code><code>DEFAULT</code> <code>NULL</code><code>,</code>
<code> </code><code>`age` </code><code>int</code><code>(11) </code><code>DEFAULT</code> <code>NULL</code><code>,</code>
<code> </code><code>`phone` </code><code>varchar</code><code>(45) </code><code>DEFAULT</code> <code>NULL</code><code>,</code>
<code> </code><code>PRIMARY</code> <code>KEY</code> <code>(`id`)</code>
<code>) ENGINE=InnoDB AUTO_INCREMENT=3 </code><code>DEFAULT</code> <code>CHARSET=utf8;</code>
<code>LOCK TABLES `users` WRITE;</code>
<code>INSERT</code> <code>INTO</code> <code>`users` </code><code>VALUES</code> <code>(1,</code><code>'jimmy.song'</code><code>,22,</code><code>'13810001234'</code><code>),(2,</code><code>'sunspot'</code><code>,24,</code><code>'13812341234'</code><code>);</code>
<code>UNLOCK TABLES;</code>
位置:cc/fozone/demo/mybatis/config/mybatis.config.xml
19
20
21
22
23
24
25
26
27
28
29
30
<code><?</code><code>xml</code> <code>version</code><code>=</code><code>"1.0"</code> <code>encoding</code><code>=</code><code>"UTF-8"</code> <code>?></code>
<code><!DOCTYPE configuration</code>
<code>PUBLIC "-//mybatis.org//DTD Config 3.0//EN"</code>
<code>"http://mybatis.org/dtd/mybatis-3-config.dtd"></code>
<code><</code><code>configuration</code><code>></code>
<code> </code><code><!-- 配置数据库链接 --></code>
<code> </code><code><</code><code>environments</code> <code>default</code><code>=</code><code>"development"</code><code>></code>
<code> </code><code><</code><code>environment</code> <code>id</code><code>=</code><code>"development"</code><code>></code>
<code> </code><code><</code><code>transactionManager</code> <code>type</code><code>=</code><code>"JDBC"</code><code>/></code>
<code> </code><code><</code><code>dataSource</code> <code>type</code><code>=</code><code>"POOLED"</code><code>></code>
<code> </code><code><!-- 数据库链接驱动 --></code>
<code> </code><code><</code><code>property</code> <code>name</code><code>=</code><code>"driver"</code> <code>value</code><code>=</code><code>"org.gjt.mm.mysql.Driver"</code><code>/></code>
<code> </code>
<code> </code><code><!-- 数据库链接 --></code>
<code> </code><code><</code><code>property</code> <code>name</code><code>=</code><code>"url"</code> <code>value</code><code>=</code><code>"jdbc:mysql://localhost:3306/mybatis?charset=utf8"</code><code>/></code>
<code> </code><code><!-- 数据库帐号密码 --></code>
<code> </code><code><</code><code>property</code> <code>name</code><code>=</code><code>"username"</code> <code>value</code><code>=</code><code>"root"</code><code>/></code>
<code> </code><code><</code><code>property</code> <code>name</code><code>=</code><code>"password"</code> <code>value</code><code>=</code><code>"root"</code><code>/></code>
<code> </code><code></</code><code>dataSource</code><code>></code>
<code> </code><code></</code><code>environment</code><code>></code>
<code> </code><code></</code><code>environments</code><code>></code>
<code> </code>
<code> </code><code><!-- 与数据库映射的配置文件列表 --></code>
<code> </code><code><</code><code>mappers</code><code>></code>
<code> </code><code><</code><code>mapper</code> <code>resource</code><code>=</code><code>"cc/fozone/demo/mybatis/config/mapper/User.mapper.xml"</code><code>/></code>
<code> </code><code></</code><code>mappers</code><code>></code>
<code></</code><code>configuration</code><code>></code>
位置:cc/fozone/demo/mybatis/pojo/User.java
31
32
33
34
35
<code>package</code> <code>cc.fozone.demo.mybatis.pojo;</code>
<code>public</code> <code>class</code> <code>User {</code>
<code> </code><code>private</code> <code>int</code> <code>id;</code>
<code> </code><code>private</code> <code>String name;</code>
<code> </code><code>private</code> <code>int</code> <code>age;</code>
<code> </code><code>private</code> <code>String phone;</code>
<code> </code><code>public</code> <code>int</code> <code>getId() {</code>
<code> </code><code>return</code> <code>id;</code>
<code> </code><code>}</code>
<code> </code><code>public</code> <code>void</code> <code>setId(</code><code>int</code> <code>id) {</code>
<code> </code><code>this</code><code>.id = id;</code>
<code> </code><code>public</code> <code>String getName() {</code>
<code> </code><code>return</code> <code>name;</code>
<code> </code><code>public</code> <code>void</code> <code>setName(String name) {</code>
<code> </code><code>this</code><code>.name = name;</code>
<code> </code><code>public</code> <code>int</code> <code>getAge() {</code>
<code> </code><code>return</code> <code>age;</code>
<code> </code><code>public</code> <code>void</code> <code>setAge(</code><code>int</code> <code>age) {</code>
<code> </code><code>this</code><code>.age = age;</code>
<code> </code><code>public</code> <code>String getPhone() {</code>
<code> </code><code>return</code> <code>phone;</code>
<code> </code><code>public</code> <code>void</code> <code>setPhone(String phone) {</code>
<code> </code><code>this</code><code>.phone = phone;</code>
<code> </code><code>public</code> <code>String toString(){</code>
<code> </code><code>return</code> <code>"{id:"</code><code>+id+</code><code>",name:"</code><code>+name+</code><code>",age:"</code><code>+age+</code><code>",phone:"</code><code>+phone+</code><code>"}"</code><code>;</code>
<code>}</code>
位置:cc/fozone/demo/mybatis/controller/IUserController.java
<code>package</code> <code>cc.fozone.demo.mybatis.controller;</code>
<code>import</code> <code>java.util.List;</code>
<code>import</code> <code>cc.fozone.demo.mybatis.pojo.User;</code>
<code>public</code> <code>interface</code> <code>IUserController {</code>
<code> </code><code>// 查询所有的用户</code>
<code> </code><code>public</code> <code>List<User> getAllUsers();</code>
<code> </code><code>// 根据电话查询用户</code>
<code> </code><code>public</code> <code>User getUser(String phone);</code>
位置:cc/fozone/demo/mybatis/config/mapper/User.mapper.xml
36
37
38
39
40
41
<code><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"</code>
<code>"http://mybatis.org/dtd/mybatis-3-mapper.dtd"></code>
<code><!--</code>
<code> </code><code>namespace:与Controller接口匹配 </code>
<code>--></code>
<code><</code><code>mapper</code> <code>namespace</code><code>=</code><code>"cc.fozone.demo.mybatis.controller.IUserController"</code><code>></code>
<code> </code><code><!--</code>
<code> </code><code>User表映射 </code>
<code> </code><code>type:类地址</code>
<code> </code><code>id:实例化ID</code>
<code> </code><code>--></code>
<code> </code><code><</code><code>resultMap</code> <code>type</code><code>=</code><code>"cc.fozone.demo.mybatis.pojo.User"</code> <code>id</code><code>=</code><code>"userResultMap"</code><code>></code>
<code> </code><code><</code><code>id</code> <code>property</code><code>=</code><code>"id"</code> <code>column</code><code>=</code><code>"id"</code> <code>/></code>
<code> </code><code><</code><code>result</code> <code>property</code><code>=</code><code>"name"</code> <code>column</code><code>=</code><code>"name"</code> <code>/></code>
<code> </code><code><</code><code>result</code> <code>property</code><code>=</code><code>"age"</code> <code>column</code><code>=</code><code>"age"</code><code>/></code>
<code> </code><code><</code><code>result</code> <code>property</code><code>=</code><code>"phone"</code> <code>column</code><code>=</code><code>"phone"</code><code>/></code>
<code> </code><code></</code><code>resultMap</code><code>></code>
<code> </code><code>select 查询语句</code>
<code> </code><code>id:唯一标示符,与Controller的接口方法一致</code>
<code> </code><code>resultMap: 查询的数据实例化注入的对象标示引用</code>
<code> </code><code>--></code>
<code> </code><code><</code><code>select</code> <code>id</code><code>=</code><code>"getAllUsers"</code> <code>resultMap</code><code>=</code><code>"userResultMap"</code><code>></code>
<code> </code><code><![CDATA[</code>
<code> </code><code>select id,name,age,phone from users</code>
<code> </code><code>]]></code>
<code> </code><code></</code><code>select</code><code>></code>
<code> </code><code><!-- </code>
<code> </code><code>#{phone}:参数,与Controller中的getUser方法中的参数一致</code>
<code> </code><code>resultType:查询的数据库实例化注入的类型,与resultMap不能同时使用,但建议使用resultMap</code>
<code> </code><code><</code><code>select</code> <code>id</code><code>=</code><code>"getUser"</code> <code>resultType</code><code>=</code><code>"cc.fozone.demo.mybatis.pojo.User"</code><code>></code>
<code> </code><code>select id,name,age,phone from users where phone = #{phone}</code>
<code></</code><code>mapper</code><code>></code>
位置:cc/fozone/demo/mybatis/App.java
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
<code>package</code> <code>cc.fozone.demo.mybatis;</code>
<code>import</code> <code>java.io.IOException;</code>
<code>import</code> <code>java.io.InputStream;</code>
<code>import</code> <code>org.apache.ibatis.io.Resources;</code>
<code>import</code> <code>org.apache.ibatis.session.SqlSession;</code>
<code>import</code> <code>org.apache.ibatis.session.SqlSessionFactory;</code>
<code>import</code> <code>org.apache.ibatis.session.SqlSessionFactoryBuilder;</code>
<code>import</code> <code>cc.fozone.demo.mybatis.controller.IUserController;</code>
<code>/**</code>
<code> </code><code>* Hello world!</code>
<code> </code><code>*</code>
<code> </code><code>*/</code>
<code>public</code> <code>class</code> <code>App {</code>
<code> </code><code>// 数据库链接配置</code>
<code> </code><code>private</code> <code>static</code> <code>final</code> <code>String CONFIG = </code><code>"cc/fozone/demo/mybatis/config/mybatis.config.xml"</code><code>;</code>
<code> </code><code>// SQL会话工厂</code>
<code> </code><code>private</code> <code>SqlSessionFactory factory;</code>
<code> </code><code>public</code> <code>App() {</code>
<code> </code><code>// 初始化</code>
<code> </code><code>this</code><code>.init();</code>
<code> </code><code>// 初始化SQL会话工厂</code>
<code> </code><code>private</code> <code>void</code> <code>init() {</code>
<code> </code><code>InputStream input;</code>
<code> </code><code>try</code> <code>{</code>
<code> </code><code>input = Resources.getResourceAsStream(CONFIG);</code>
<code> </code><code>this</code><code>.factory = </code><code>new</code> <code>SqlSessionFactoryBuilder().build(input);</code>
<code> </code><code>} </code><code>catch</code> <code>(IOException e) {</code>
<code> </code><code>// TODO Auto-generated catch block</code>
<code> </code><code>e.printStackTrace();</code>
<code> </code><code>}</code>
<code> </code><code>// 查询所有用户列表</code>
<code> </code><code>public</code> <code>List<User> getUsers() {</code>
<code> </code><code>// 打开会话</code>
<code> </code><code>SqlSession session = </code><code>this</code><code>.factory.openSession();</code>
<code> </code>
<code> </code><code>// 根据映射实例化控制器对象,这里的IUserController.class与Mapper配置中的namespace一致</code>
<code> </code><code>IUserController controller = session.getMapper(IUserController.</code><code>class</code><code>);</code>
<code> </code><code>// 获得所有用户</code>
<code> </code><code>List<User> list = controller.getAllUsers();</code>
<code> </code><code>// 关闭会话</code>
<code> </code><code>session.close();</code>
<code> </code><code>return</code> <code>list;</code>
<code> </code><code>// 根据电话号查询用户</code>
<code> </code><code>public</code> <code>User getUser(String phone) {</code>
<code> </code><code>User user = </code><code>null</code><code>;</code>
<code> </code><code>// 会话</code>
<code> </code><code>// 查询用户,这里传入的参数会被替换在Mapper中的#{phone}占位符</code>
<code> </code><code>user = controller.getUser(phone);</code>
<code> </code><code>return</code> <code>user;</code>
位置:cc/fozone/demo/mybatis/AppTest.java
<code>import</code> <code>org.junit.Before;</code>
<code>import</code> <code>org.junit.Test;</code>
<code>import</code> <code>static</code> <code>org.junit.Assert.*;</code>
<code>public</code> <code>class</code> <code>AppTest {</code>
<code> </code><code>private</code> <code>App app;</code>
<code> </code><code>@Before</code>
<code> </code><code>public</code> <code>void</code> <code>setUp() </code><code>throws</code> <code>Exception {</code>
<code> </code><code>app = </code><code>new</code> <code>App();</code>
<code> </code><code>assertNotNull(app);</code>
<code> </code><code>@Test</code>
<code> </code><code>public</code> <code>void</code> <code>testList() {</code>
<code> </code><code>List<User> list = app.getUsers();</code>
<code> </code><code>assertEquals(</code><code>2</code><code>,list.size());</code>
<code> </code><code>public</code> <code>void</code> <code>testUser(){</code>
<code> </code><code>User user = app.getUser(</code><code>"13810001234"</code><code>);</code>
<code> </code><code>assertNotNull(user);</code>
<code> </code><code>assertEquals(</code><code>"jimmy.song"</code><code>, user.getName());</code>
AppTest.java文件鼠标右键 -> Run -> JUnit Test
<a href="http://s3.51cto.com/wyfs02/M02/49/CD/wKiom1Qa967AeyyNAABvYTHZCHs588.jpg" target="_blank"></a>
本文转自 sundunjam 51CTO博客,原文链接:http://blog.51cto.com/sunspot/1554965,如需转载请自行联系原作者