天天看点

【狂人小白】MyBatis.002 第一个查询!

请注意后面文章中的注释

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>&lt;?</code><code>xml</code> <code>version</code><code>=</code><code>"1.0"</code> <code>encoding</code><code>=</code><code>"UTF-8"</code> <code>?&gt;</code>

<code>&lt;!DOCTYPE configuration</code>

<code>PUBLIC "-//mybatis.org//DTD Config 3.0//EN"</code>

<code>"http://mybatis.org/dtd/mybatis-3-config.dtd"&gt;</code>

<code>&lt;</code><code>configuration</code><code>&gt;</code>

<code>    </code><code>&lt;!-- 配置数据库链接 --&gt;</code>

<code>    </code><code>&lt;</code><code>environments</code> <code>default</code><code>=</code><code>"development"</code><code>&gt;</code>

<code>        </code><code>&lt;</code><code>environment</code> <code>id</code><code>=</code><code>"development"</code><code>&gt;</code>

<code>            </code><code>&lt;</code><code>transactionManager</code> <code>type</code><code>=</code><code>"JDBC"</code><code>/&gt;</code>

<code>            </code><code>&lt;</code><code>dataSource</code> <code>type</code><code>=</code><code>"POOLED"</code><code>&gt;</code>

<code>                </code><code>&lt;!-- 数据库链接驱动 --&gt;</code>

<code>                </code><code>&lt;</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>/&gt;</code>

<code>                </code> 

<code>                </code><code>&lt;!-- 数据库链接 --&gt;</code>

<code>                </code><code>&lt;</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>/&gt;</code>

<code>                </code><code>&lt;!-- 数据库帐号密码 --&gt;</code>

<code>                </code><code>&lt;</code><code>property</code> <code>name</code><code>=</code><code>"username"</code> <code>value</code><code>=</code><code>"root"</code><code>/&gt;</code>

<code>                </code><code>&lt;</code><code>property</code> <code>name</code><code>=</code><code>"password"</code> <code>value</code><code>=</code><code>"root"</code><code>/&gt;</code>

<code>            </code><code>&lt;/</code><code>dataSource</code><code>&gt;</code>

<code>        </code><code>&lt;/</code><code>environment</code><code>&gt;</code>

<code>    </code><code>&lt;/</code><code>environments</code><code>&gt;</code>

<code>    </code> 

<code>    </code><code>&lt;!-- 与数据库映射的配置文件列表 --&gt;</code>

<code>    </code><code>&lt;</code><code>mappers</code><code>&gt;</code>

<code>        </code><code>&lt;</code><code>mapper</code> <code>resource</code><code>=</code><code>"cc/fozone/demo/mybatis/config/mapper/User.mapper.xml"</code><code>/&gt;</code>

<code>    </code><code>&lt;/</code><code>mappers</code><code>&gt;</code>

<code>&lt;/</code><code>configuration</code><code>&gt;</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&lt;User&gt; 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>&lt;!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"</code>

<code>"http://mybatis.org/dtd/mybatis-3-mapper.dtd"&gt;</code>

<code>&lt;!--</code>

<code>    </code><code>namespace:与Controller接口匹配 </code>

<code>--&gt;</code>

<code>&lt;</code><code>mapper</code> <code>namespace</code><code>=</code><code>"cc.fozone.demo.mybatis.controller.IUserController"</code><code>&gt;</code>

<code>    </code><code>&lt;!--</code>

<code>        </code><code>User表映射 </code>

<code>        </code><code>type:类地址</code>

<code>        </code><code>id:实例化ID</code>

<code>     </code><code>--&gt;</code>

<code>    </code><code>&lt;</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>&gt;</code>

<code>        </code><code>&lt;</code><code>id</code> <code>property</code><code>=</code><code>"id"</code> <code>column</code><code>=</code><code>"id"</code> <code>/&gt;</code>

<code>        </code><code>&lt;</code><code>result</code> <code>property</code><code>=</code><code>"name"</code> <code>column</code><code>=</code><code>"name"</code> <code>/&gt;</code>

<code>        </code><code>&lt;</code><code>result</code> <code>property</code><code>=</code><code>"age"</code> <code>column</code><code>=</code><code>"age"</code><code>/&gt;</code>

<code>        </code><code>&lt;</code><code>result</code> <code>property</code><code>=</code><code>"phone"</code> <code>column</code><code>=</code><code>"phone"</code><code>/&gt;</code>

<code>    </code><code>&lt;/</code><code>resultMap</code><code>&gt;</code>

<code>        </code><code>select 查询语句</code>

<code>        </code><code>id:唯一标示符,与Controller的接口方法一致</code>

<code>        </code><code>resultMap: 查询的数据实例化注入的对象标示引用</code>

<code>    </code><code>--&gt;</code>

<code>    </code><code>&lt;</code><code>select</code> <code>id</code><code>=</code><code>"getAllUsers"</code> <code>resultMap</code><code>=</code><code>"userResultMap"</code><code>&gt;</code>

<code>        </code><code>&lt;![CDATA[</code>

<code>            </code><code>select id,name,age,phone from users</code>

<code>        </code><code>]]&gt;</code> 

<code>    </code><code>&lt;/</code><code>select</code><code>&gt;</code>

<code>    </code><code>&lt;!-- </code>

<code>        </code><code>#{phone}:参数,与Controller中的getUser方法中的参数一致</code>

<code>        </code><code>resultType:查询的数据库实例化注入的类型,与resultMap不能同时使用,但建议使用resultMap</code>

<code>    </code><code>&lt;</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>&gt;</code>

<code>            </code><code>select id,name,age,phone from users where phone = #{phone}</code>

<code>&lt;/</code><code>mapper</code><code>&gt;</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&lt;User&gt; 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&lt;User&gt; 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&lt;User&gt; 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文件鼠标右键 -&gt; Run -&gt; 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,如需转载请自行联系原作者