基于现在Mybatis 我没有学习太多,就基于简单的增删改查进行基础学习。

学习资源来自    http://www.cnblogs.com/xdp-gacl/p/4261895.html

1  引入jar包

mybatis

  mybatis-3.1.1.jar

【MYSQL驱动包】
    mysql-connector-java-5.1.7-bin.jar

2 2 建立对应数据库表

3 在src目录创建配置文件conf.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
  3. <configuration>
  4. <environments default="development">
  5. <environment id="development">
  6. <transactionManager type="JDBC" />
  7. <!-- 配置数据库连接信息 -->
  8. <dataSource type="POOLED">
  9. <property name="driver" value="com.mysql.jdbc.Driver" />
  10. <property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis" />
  11. <property name="username" value="root" />
  12. <property name="password" value="s1127736971" />
  13. </dataSource>
  14. </environment>
  15. </environments>
  16.  
  17. <mappers><!-- 这里下面是mapper的注册-->
  18. <mapper resource="my/Mapper/userMapper.xml"/>
  19. <!-- <mapper resource="my.Mapper.userMapper2"/> 记得用class 这是错误的-->
  20. <mapper class="my.Mapper.userMapper2"/>
  21. </mappers>
  22.  
  23. </configuration>

4 编写对应的User类

  1. package my.domain;
  2.  
  3. public class User {
  4. private int id;
  5. private String name;
  6. private int age;
  7. public int getId() {
  8. return id;
  9. }
  10. public void setId(int id) {
  11. this.id = id;
  12. }
  13. public String getName() {
  14. return name;
  15. }
  16. public void setName(String name) {
  17. this.name = name;
  18. }
  19. public int getAge() {
  20. return age;
  21. }
  22. public void setAge(int age) {
  23. this.age = age;
  24. }
  25. @Override
  26. public String toString() {
  27. return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
  28. }
  29. }

5 编写对应的映射文档Mapper(xml) 之后在对应的conf中添加Mapper(上面已经写好)

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3. <!-- 为这个mapper指定一个唯一的namespace,namespace的值习惯上设置成包名+sql映射文件名,这样就能够保证namespace的值是唯一的
  4. 例如namespace="me.gacl.mapping.userMapper"就是me.gacl.mapping(包名)+userMapper(userMapper.xml文件去除后缀)
  5. -->
  6. <mapper namespace="my.Mapper.userMapper">
  7. <!-- 在select标签中编写查询的SQL语句, 设置select标签的id属性为getUser,id属性值必须是唯一的,不能够重复
  8. 使用parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型
  9. resultType="me.gacl.domain.User"就表示将查询结果封装成一个User类的对象返回
  10. User类就是users表所对应的实体类
  11. -->
  12. <!--
  13. 根据id查询得到一个user对象
  14. -->
  15. <select id="getUser" parameterType="int"
  16. resultType="my.domain.User">
  17. select * from users where id=#{id}
  18. </select>
  19.  
  20. <insert id="insertUser" parameterType="my.domain.User">
  21. insert into users(name,age) values(#{name},#{age})
  22. </insert>
  23.  
  24. <delete id="deleteUser" parameterType="int">
  25. delete from users where id=#{id}
  26. </delete>
  27.  
  28. <update id="updateUser" parameterType="my.domain.User">
  29. update users set name=#{name},age=#{age} where id=#{id}
  30. </update>
  31.  
  32. <select id="getUsers" resultType="my.domain.User">
  33. select * from users
  34. </select>
  35.  
  36. </mapper>

编写测试类

  1. package Test;
  2.  
  3. import static org.junit.Assert.*;
  4.  
  5. import java.io.IOException;
  6. import java.io.Reader;
  7. import java.util.Collection;
  8.  
  9. import my.Mapper.userMapper2;
  10. import my.domain.User;
  11.  
  12. import org.apache.ibatis.io.Resources;
  13. import org.apache.ibatis.session.SqlSession;
  14. import org.apache.ibatis.session.SqlSessionFactory;
  15. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  16. import org.junit.Test;
  17.  
  18. public class test2 {
  19.  
  20. // Reader reader = Resources.getResourceAsReader(config); 这个方法是错误的,大概是里面不能用静态?
  21. //SqlSessionFactory sqlFactory = new SqlSessionFactoryBuilder().build(reader);
  22. //SqlSession sqlSession = sqlFactory.openSession();
  23.  
  24. public SqlSession getSqlSession() throws IOException{
  25. String config = "conf.xml";
  26. Reader reader = Resources.getResourceAsReader(config);
  27. SqlSessionFactory sqlFactory = new SqlSessionFactoryBuilder().build(reader);
  28. return sqlFactory.openSession();
  29. }
  30.  
  31. @Test
  32. public void add() throws IOException {
  33. SqlSession sqlSession = getSqlSession();
  34. String statement = "my.Mapper.userMapper.insertUser";
  35. User user = new User();
  36.  
  37. user.setAge(10);
  38. user.setName("猛虎捕食");
  39. sqlSession.insert(statement, user);
  40. sqlSession.commit();//需要commit 不然没有效果,教程却不用?
  41. sqlSession.close();
  42. }
  43.  
  44. @Test
  45. public void update() throws IOException{
  46. SqlSession sqlSession = getSqlSession();
  47. String statement = "my.Mapper.userMapper.updateUser";
  48.  
  49. User user = new User();
  50. user.setId(1);
  51. user.setAge(10);
  52. user.setName("这是改后");
  53. sqlSession.update(statement, user);
  54. sqlSession.commit();
  55. sqlSession.close();
  56. }
  57.  
  58. @Test
  59. public void delete() throws IOException{
  60. SqlSession sqlSession = getSqlSession();
  61. String statement = "my.Mapper.userMapper.deleteUser";
  62.  
  63. sqlSession.delete(statement, 10);
  64. sqlSession.commit();
  65. sqlSession.close();
  66.  
  67. }
  68.  
  69. @Test
  70. public void queryAll() throws IOException{//这是第二种方式写的用法
  71. SqlSession sqlSession = getSqlSession();
  72. String statement = "my.Mapper.userMapper.getUsers";
  73.  
  74. Collection<User> users = sqlSession.selectList(statement);
  75. System.out.println(users);
  76. sqlSession.close();
  77. }
  78.  
  79. @Test
  80. public void insert () throws IOException{
  81. SqlSession sqlSession = getSqlSession();
  82. userMapper2 mapper = sqlSession.getMapper(userMapper2.class);
  83. User user = new User();
  84. user.setAge(15);
  85. user.setName("猛虎爬树");
  86. int result = mapper.add(user);
  87. sqlSession.commit();
  88. sqlSession.close();
  89. System.out.println(result);
  90.  
  91. }
  92.  
  93. }

工程大概目录

mybatis的语句还有另一种写法

基于注解的实现,首先要先写出映射接口

  1. package my.Mapper;
  2.  
  3. import java.util.List;
  4.  
  5. import my.domain.User;
  6.  
  7. import org.apache.ibatis.annotations.Delete;
  8. import org.apache.ibatis.annotations.Insert;
  9. import org.apache.ibatis.annotations.Select;
  10. import org.apache.ibatis.annotations.Update;
  11.  
  12. public interface userMapper2 {
  13.  
  14. @Insert("insert into users(name,age) values(#{name},#{age})")
  15. public int add(User user);
  16.  
  17. @Delete(" delete from users where id=#{id}")
  18. public int delete();
  19.  
  20. @Update("update users set name=#{name},age=#{age} where id= #{id}")
  21. public int update();
  22.  
  23. @Select("select * from users")
  24. public List<User>getAll();
  25. }

之后直接在上面的conf.xml文件添加类后缀的配置

代码简单测试在上面测试类的之后一个方法,到这完成基本增删改查配置。

注意点:

sqlSessionFactory需要commit 和close才能成功

基本流程是,用mybatis的Resouces读取配置文件来开启SqlSession,选择需要执行的语句,SqlSession提交执行语句。

注解形式则不是选择执行语句,而是选择对应接口类。

mybatis的自动生成。。。懒人福利

下载对应jar包 ,在配置好generatorConfig,运行,自动生成Dao(mapper) 、实体类、xml配置。

generatorConfig 模板如下

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE generatorConfiguration
  3. PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
  4. "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
  5. <generatorConfiguration>
  6. <!-- 数据库驱动-->
  7. <classPathEntry location="mysql-connector-java-5.0.8-bin.jar"/>
  8. <context id="DB2Tables" targetRuntime="MyBatis3">
  9. <commentGenerator>
  10. <property name="suppressDate" value="true"/>
  11. <!-- 是否去除自动生成的注释 true:是 : false:否 -->
  12. <property name="suppressAllComments" value="true"/>
  13. </commentGenerator>
  14. <!--数据库链接URL,用户名、密码 -->
  15. <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://127.0.0.1:3306/mybatis" userId="root" password="s1127736971">
  16. </jdbcConnection>
  17. <javaTypeResolver>
  18. <property name="forceBigDecimals" value="false"/>
  19. </javaTypeResolver>
  20. <!-- 生成模型的包名和位置-->
  21. <javaModelGenerator targetPackage="com.book.pojo" targetProject="src">
  22. <property name="enableSubPackages" value="true"/>
  23. <property name="trimStrings" value="true"/>
  24. </javaModelGenerator>
  25. <!-- 生成映射文件的包名和位置-->
  26. <sqlMapGenerator targetPackage="com.book.mapping" targetProject="src">
  27. <property name="enableSubPackages" value="true"/>
  28. </sqlMapGenerator>
  29. <!-- 生成DAO的包名和位置-->
  30. <javaClientGenerator type="XMLMAPPER" targetPackage="com.book.dao" targetProject="src">
  31. <property name="enableSubPackages" value="true"/>
  32. </javaClientGenerator>
  33. <!-- 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是实体类名-->
  34. <table tableName="users" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
  35. </context>
  36. </generatorConfiguration>

Mybaties学习的更多相关文章

  1. spring学习 六 spring与mybatis整合

    在mybatis学习中有两种配置文件 :全局配置文件,映射配置文件.mybatis和spring整合,其实就是把mybatis中的全局配置文件的配置内容都变成一个spring容器的一个bean,让sp ...

  2. MyBaties源码解析

    觉得查看源代码确实是一个学习的一种方法 因为很多时候别人把最核心的代码给我们都封装好了 我们直接可以来拿使用 很多时候自己也会问 为什么通过这个方法就可以得到我觉得就是一颗好奇心吧 我算了算 就这三个 ...

  3. java 动态代理—— Mybaties 拦截器链基本原理实现

    1.摘要 Mybaties 中有个分页插件,之前有特意的去了解了一下原理 :https://www.cnblogs.com/jonrain0625/p/11168247.html,从了解中得知分页插件 ...

  4. 从直播编程到直播教育:LiveEdu.tv开启多元化的在线学习直播时代

    2015年9月,一个叫Livecoding.tv的网站在互联网上引起了编程界的注意.缘于Pingwest品玩的一位编辑在上网时无意中发现了这个网站,并写了一篇文章<一个比直播睡觉更奇怪的网站:直 ...

  5. Angular2学习笔记(1)

    Angular2学习笔记(1) 1. 写在前面 之前基于Electron写过一个Markdown编辑器.就其功能而言,主要功能已经实现,一些小的不影响使用的功能由于时间关系还没有完成:但就代码而言,之 ...

  6. ABP入门系列(1)——学习Abp框架之实操演练

    作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...

  7. 消息队列——RabbitMQ学习笔记

    消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...

  8. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  9. Unity3d学习 制作地形

    这周学习了如何在unity中制作地形,就是在一个Terrain的对象上盖几座小山,在山底种几棵树,那就讲一下如何完成上述内容. 1.在新键得项目的游戏的Hierarchy目录中新键一个Terrain对 ...

随机推荐

  1. JSX语法

    什么是JSX语法:就是符合 xml 规范的 JS 语法:(语法格式相对来说,要比HTML严谨很多) 1. 如何启用 jsx 语法? 安装 `babel` 插件 - 运行`cnpm i babel-co ...

  2. Tempter of the Bone HDU - 1010

    The doggie found a bone in an ancient maze, which fascinated him a lot. However, when he picked it u ...

  3. array_unique

    array_unique() 函数移除数组中的重复的值,并返回结果数组. 当几个数组元素的值相等时,只保留第一个元素,其他的元素被删除. 返回的数组中键名不变. <?php $a=array(& ...

  4. Codeforces Round #525 (Div. 2)-A/B/C/E

    http://codeforces.com/contest/1088/problem/A 暴力一波就好了. //题解有O(1)做法是 (n-n%2,2) #include<iostream> ...

  5. python 小练习 8

    砝码问题1有一组砝码,重量互不相等,分别为m1.m2.m3……mn:它们可取的最大数量分别为x1.x2.x3……xn. 现要用这些砝码去称物体的重量,问能称出多少种不同的重量. 现在给你两个正整数列表 ...

  6. 17. Letter Combinations of a Phone Number C++回溯法

    简单的回溯法! class Solution { public: void backTrack(string digits, vector<string> words, string an ...

  7. sku 加减号的增删

    ---恢复内容开始--- //php页面public function test(){ $id="1"; $data=Db::table('week3_goods') ->j ...

  8. ssh -vT git@github.com get “ No such file or directory” 错误

    在"Are you sure you want to continue connnecting"的时候回复y,不要打空格跳过 参考:http://stackoverflow.com ...

  9. SpringBoot系列之Hikari连接池

    1.springboot 2.0 中默认连接池是Hikari,在引用parents后不用专门再添加依赖 2.application.yml中的配置 # jdbc_config datasource s ...

  10. 【转】Entity Framework Extended Library (EF扩展类库,支持批量更新、删除、合并多个查询等)

    E文好的可以直接看https://github.com/loresoft/EntityFramework.Extended 也可以在nuget上直接安装这个包,它的说明有点过时了,最新版本已经改用对I ...