Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 459|回复: 0

[默认分类] MyBatis学习笔记(一)入门

[复制链接]
  • TA的每日心情
    开心
    2021-12-13 21:45
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2018-5-24 16:38:10 | 显示全部楼层 |阅读模式
    首先给大家推荐几个网页:
    http://blog.csdn.net/isea533/article/category/2092001    没事看看 - MyBatis工具:www.mybatis.tk
    http://www.mybatis.org/mybatis-3/zh/getting-started.html 入门
    http://www.mybatis.tk/
    http://mbg.cndocs.tk/
    这些也是我朋友介绍的。刚刚接触MyBatis可以看看。接下来就开始学习mybatis了。
    MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了Google code,并且改名为MyBatis 。2013年11月迁移到Github。

      
    一、理解什么是MyBatis?
    MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。 MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索。 MyBatis 可以使用简单的XML 或注解用于配置和原始映射,将接口和 java 的 POJO( Plain Old Java Objects,普通的Java 对象)映射成数据库中的记录.
      1)MyBATIS 目前提供了三种语言实现的版本,包括:Java、.NET以及Ruby。(我主要学习java,就讲java的使用)
      2)它提供的持久层框架包括SQL Maps和Data Access Objects(DAO)。
      3)mybatis与hibernate的对比?
       mybatis提供一种“半自动化”的ORM实现。
       这里的“半自动化”,是相对Hibernate等提供了全面的数据库封装机制的“全自动化”ORM实现而言,“全自动”ORM实现了POJO和数据库表之间的映射,以及 SQL 的自动生成和执行。
        而mybatis的着力点,则在于POJO与SQL之间的映射关系。
      
    二、简单例子(快速入门)
    1)首先建立项目Java Web
      
    2)导入mybatis所需的jar包

    mybatis需要jar包:mybatis-3.3.0.jar
    mysql驱动jar包:mysql-connector-java-5.1.15.-bin.jar
    日志记录jar包:log4j.jar
    3)创建数据库数据(mysql)

      
    4)mysql驱动配置文件(这样可以优化性能)
    我个人喜欢把所需要使用到的包先建立好。配置文件先创建好。


      
      
    5)添加mybatis配置文件mybatis.cfg.xml


    1. 1 <?xml version="1.0" encoding="UTF-8"?>
    2. 2 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
    3. 3 <configuration>
    4. 4
    5. 5   <!-- 引入外部配置文件 -->
    6. 6   <properties resource="mysql.properties"></properties>
    7. 7   
    8. 8    <!-- 配置mybatis运行环境 -->
    9. 9      <environments default="cybatis">
    10. 10         <environment id="cybatis">
    11. 11             <!-- type="JDBC" 代表使用JDBC的提交和回滚来管理事务 -->
    12. 12             <transactionManager type="JDBC" />
    13. 13            
    14. 14             <!-- mybatis提供了3种数据源类型,分别是:POOLED,UNPOOLED,JNDI -->
    15. 15             <!-- POOLED 表示支持JDBC数据源连接池 -->
    16. 16             <!-- UNPOOLED 表示不支持数据源连接池 -->
    17. 17             <!-- JNDI 表示支持外部数据源连接池 -->
    18. 18             <dataSource type="POOLED">
    19. 19                 <property name="driver" value="${jdbc.driver}" />
    20. 20                 <property name="url" value="${jdbc.url}" />
    21. 21                 <property name="username" value="${jdbc.username}" />
    22. 22                 <property name="password" value="${jdbc.password}" />
    23. 23             </dataSource>
    24. 24         </environment>
    25. 25     </environments>
    26. 26     
    27. 27 </configuration>
    复制代码


      
      
    6)创建对应的实体对象

      
    对应的java代码:



      
    1. 1 package com.cy.mybatis.beans;
    2. 2
    3. 3 import java.io.Serializable;
    4. 4
    5. 5 public class UserBean implements Serializable{
    6. 6
    7. 7     private static final long serialVersionUID = 1L;
    8. 8     private Integer id;
    9. 9     private String username;
    10. 10     private String password;
    11. 11     private Double account;
    12. 12     
    13. 13     public UserBean() {
    14. 14         super();
    15. 15     }
    16. 16     
    17. 17     public UserBean(String username, String password, Double account) {
    18. 18         super();
    19. 19         this.username = username;
    20. 20         this.password = password;
    21. 21         this.account = account;
    22. 22     }
    23. 23
    24. 24     public UserBean(Integer id, String username, String password, Double account) {
    25. 25         super();
    26. 26         this.id = id;
    27. 27         this.username = username;
    28. 28         this.password = password;
    29. 29         this.account = account;
    30. 30     }
    31. 31
    32. 32     public Integer getId() {
    33. 33         return id;
    34. 34     }
    35. 35
    36. 36     public void setId(Integer id) {
    37. 37         this.id = id;
    38. 38     }
    39. 39
    40. 40     public String getUsername() {
    41. 41         return username;
    42. 42     }
    43. 43
    44. 44     public void setUsername(String username) {
    45. 45         this.username = username;
    46. 46     }
    47. 47
    48. 48     public String getPassword() {
    49. 49         return password;
    50. 50     }
    51. 51
    52. 52     public void setPassword(String password) {
    53. 53         this.password = password;
    54. 54     }
    55. 55
    56. 56     public Double getAccount() {
    57. 57         return account;
    58. 58     }
    59. 59
    60. 60     public void setAccount(Double account) {
    61. 61         this.account = account;
    62. 62     }
    63. 63
    64. 64     @Override
    65. 65     public String toString() {
    66. 66         return "UserBean [id=" + id + ", username=" + username + ", password="
    67. 67                 + password + ", account=" + account + "]";
    68. 68     }
    69. 69     
    70. 70     
    71. 71     
    72. 72
    73. 73 }
    复制代码

      
    View Code

      
      
    7)创建方法接口UserMapper.java和定义操作t_user表的sql映射文件UserMapper.xml

    提供简单的增删改查数据信息。

    1. 1 package com.cy.mybatis.mapper;
    2. 2
    3. 3 import java.util.List;
    4. 4
    5. 5 import com.cy.mybatis.beans.UserBean;
    6. 6
    7. 7 public interface UserMapper {
    8. 8     /**
    9. 9      * 新增用戶
    10. 10      * @param user
    11. 11      * @return
    12. 12      * @throws Exception
    13. 13      */
    14. 14     public int insertUser(UserBean user) throws Exception;
    15. 15     /**
    16. 16      * 修改用戶
    17. 17      * @param user
    18. 18      * @param id
    19. 19      * @return
    20. 20      * @throws Exception
    21. 21      */
    22. 22     public int updateUser (UserBean user,int id) throws Exception;
    23. 23      /**
    24. 24       * 刪除用戶
    25. 25       * @param id
    26. 26       * @return
    27. 27       * @throws Exception
    28. 28       */
    29. 29     public int deleteUser(int id) throws Exception;
    30. 30     /**
    31. 31      * 根据id查询用户信息
    32. 32      * @param id
    33. 33      * @return
    34. 34      * @throws Exception
    35. 35      */
    36. 36     public UserBean selectUserById(int id) throws Exception;
    37. 37      /**
    38. 38       * 查询所有的用户信息
    39. 39       * @return
    40. 40       * @throws Exception
    41. 41       */
    42. 42     public List<UserBean> selectAllUser() throws Exception;
    43. 43 }
    复制代码


      

    UserMapper.xml

    1. 1 <?xml version="1.0" encoding="UTF-8"?>
    2. 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper 3.0" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    3. 3 <mapper namespace="com.cy.mybatis.mapper.UserMapper">
    4. 4 <!-- 自定义返回结果集 -->
    5. 5    <resultMap id="userMap" type="UserBean">
    6. 6         <id property="id" column="id" javaType="java.lang.Integer"></id>
    7. 7         <result property="username" column="username" javaType="java.lang.String"></result>
    8. 8         <result property="password" column="password" javaType="java.lang.String"></result>
    9. 9         <result property="account" column="account" javaType="java.lang.Double"></result>
    10. 10     </resultMap>
    11. 11 <!-- 在各种标签中的id属性必须和接口中的方法名相同 , id属性值必须是唯一的,不能够重复使用。parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型-->   
    12. 12 <!-- useGeneratedKeys:( 仅 对 insert 有 用 ) 这 会 告 诉 MyBatis 使 用 JDBC 的getGeneratedKeys
    13. 13             方法来取出由数据(比如:像 MySQL 和 SQLServer 这样的数据库管理系统的自动递增字段)内部生成的主键。默认值: false。 -->   
    14. 14 <!--keyProperty: (仅对 insert有用)标记一个属性, MyBatis 会通过 getGeneratedKeys或者通过 insert 语句的 selectKey 子元素设置它的值。默认:不设置。 -->
    15. 15 <!--#{}中的内容,为占位符,当参数为某个JavaBean时,表示放置该Bean对象的属性值  -->
    16. 16
    17. 17
    18. 18     <insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
    19. 19         insert into t_user (username,password,account) values (#{username},#{password},#{account})
    20. 20     </insert>
    21. 21     
    22. 22     <update id="updateUser" >
    23. 23       update t_user set username=#{username},password=#{password},account=#{account} where id=#{id}
    24. 24     </update>
    25. 25     
    26. 26     <delete id="deleteUser" parameterType="int">
    27. 27      delete from t_user where id=#{id}  
    28. 28     </delete>
    29. 29     
    30. 30     <select id="selectUserById" parameterType="int" resultMap="userMap">
    31. 31      select * from t_user where id=#{id}
    32. 32     </select>
    33. 33     
    34. 34     <select id="selectAllUser" resultMap="userMap">
    35. 35      select * from t_user
    36. 36     </select>
    37. 37     
    38. 38     
    39. 39 </mapper>   
    复制代码


      
    这时需要为mybatis.cfg.xml里注册UserMapper.xml文件。

    1. 1 <?xml version="1.0" encoding="UTF-8"?>
    2. 2 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
    3. 3 <configuration>
    4. 4
    5. 5   <!-- 引入外部配置文件 -->
    6. 6   <properties resource="mysql.properties"></properties>
    7. 7   
    8. 8   
    9. 9    <!-- 为JAVA Bean起类别名 -->
    10. 10    <typeAliases >
    11. 11         <!-- 别名方式1,一个一个的配置 type中放置的是类的全路径,alias中放置的是类别名
    12. 12         <typeAliase type="com.cy.mybatis.beans.UserBean" alias="UserBean"/> -->
    13. 13         <!-- 别名方式2,自动扫描,将JAVA类的类名作为类的类别名 -->
    14. 14         <package name="com.cy.mybatis.beans"/>
    15. 15    </typeAliases>
    16. 16   
    17. 17   
    18. 18    <!-- 配置mybatis运行环境 -->
    19. 19      <environments default="cybatis">
    20. 20         <environment id="cybatis">
    21. 21             <!-- type="JDBC" 代表使用JDBC的提交和回滚来管理事务 -->
    22. 22             <transactionManager type="JDBC" />
    23. 23            
    24. 24             <!-- mybatis提供了3种数据源类型,分别是:POOLED,UNPOOLED,JNDI -->
    25. 25             <!-- POOLED 表示支持JDBC数据源连接池 -->
    26. 26             <!-- UNPOOLED 表示不支持数据源连接池 -->
    27. 27             <!-- JNDI 表示支持外部数据源连接池 -->
    28. 28             <dataSource type="POOLED">
    29. 29                 <property name="driver" value="${jdbc.driver}" />
    30. 30                 <property name="url" value="${jdbc.url}" />
    31. 31                 <property name="username" value="${jdbc.username}" />
    32. 32                 <property name="password" value="${jdbc.password}" />
    33. 33             </dataSource>
    34. 34         </environment>
    35. 35     </environments>
    36. 36     
    37. 37     
    38. 38     <mappers>
    39. 39         <!-- 告知映射文件方式1,一个一个的配置
    40. 40         <mapper resource="com/cy/mybatis/mapper/UserMapper.xml"/>-->
    41. 41         <!-- 告知映射文件方式2,自动扫描包内的Mapper接口与配置文件 -->
    42. 42         <package name="com/cy/mybatis/mapper"/>
    43. 43     </mappers>
    44. 44 </configuration>
    复制代码


      
      
    8)需要建立一个工具类文件

      

    1. 1 package com.cy.mybatis.tools;
    2. 2
    3. 3 import java.io.Reader;
    4. 4
    5. 5 import org.apache.ibatis.io.Resources;
    6. 6 import org.apache.ibatis.session.SqlSession;
    7. 7 import org.apache.ibatis.session.SqlSessionFactory;
    8. 8 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    9. 9
    10. 10 public class DBTools {
    11. 11     public static SqlSessionFactory sessionFactory;
    12. 12     
    13. 13     static{
    14. 14         try {
    15. 15             //使用MyBatis提供的Resources类加载mybatis的配置文件
    16. 16             Reader reader = Resources.getResourceAsReader("mybatis.cfg.xml");
    17. 17             //构建sqlSession的工厂
    18. 18             sessionFactory = new SqlSessionFactoryBuilder().build(reader);
    19. 19         } catch (Exception e) {
    20. 20             e.printStackTrace();
    21. 21         }
    22. 22         
    23. 23     }
    24. 24     //创建能执行映射文件中sql的sqlSession
    25. 25     public static SqlSession getSession(){
    26. 26         return sessionFactory.openSession();
    27. 27     }
    28. 28     
    29. 29 }
    复制代码


      
      
    9)写个测试


    1. 1 package com.cy.mybatis.service;
    2. 2
    3. 3 import java.util.List;
    4. 4
    5. 5 import org.apache.ibatis.session.SqlSession;
    6. 6
    7. 7 import com.cy.mybatis.beans.UserBean;
    8. 8 import com.cy.mybatis.tools.DBTools;
    9. 9 import com.cy.mybatis.mapper.UserMapper;
    10. 10
    11. 11 public class UserService {
    12. 12
    13. 13   
    14. 14 15      
    15. 16     public static void main(String[] args) {
    16. 17           insertUser();
    17. 18 //        deleteUser();
    18. 19 //        selectUserById();
    19. 20 //        selectAllUser();
    20. 21     }
    21. 22
    22. 23     
    23. 24     /**
    24. 25      * 新增用户
    25. 26      */
    26. 27     private static void insertUser() {
    27. 28         SqlSession session = DBTools.getSession();
    28. 29         UserMapper mapper = session.getMapper(UserMapper.class);
    29. 30         UserBean user = new UserBean("懿", "1314520", 7000.0);
    30. 31         try {
    31. 32             mapper.insertUser(user);
    32. 33             System.out.println(user.toString());
    33. 34              session.commit();
    34. 35         } catch (Exception e) {
    35. 36             e.printStackTrace();
    36. 37             session.rollback();
    37. 38         }
    38. 39     }
    39. 40     
    40. 41     
    41. 42     /**
    42. 43      * 删除用户
    43. 44      */
    44. 45     private static void deleteUser(){
    45. 46         SqlSession session=DBTools.getSession();
    46. 47         UserMapper mapper=session.getMapper(UserMapper.class);
    47. 48         try {
    48. 49             mapper.deleteUser(1);
    49. 50             session.commit();
    50. 51         } catch (Exception e) {
    51. 52             e.printStackTrace();
    52. 53             session.rollback();
    53. 54         }
    54. 55     }
    55. 56     
    56. 57     
    57. 58     /**
    58. 59      * 根据id查询用户
    59. 60      */
    60. 61     private static void selectUserById(){
    61. 62         SqlSession session=DBTools.getSession();
    62. 63         UserMapper mapper=session.getMapper(UserMapper.class);
    63. 64         try {
    64. 65         UserBean user=    mapper.selectUserById(2);
    65. 66         System.out.println(user.toString());
    66. 67            
    67. 68             session.commit();
    68. 69         } catch (Exception e) {
    69. 70             e.printStackTrace();
    70. 71             session.rollback();
    71. 72         }
    72. 73     }
    73. 74     
    74. 75     /**
    75. 76      * 查询所有的用户
    76. 77      */
    77. 78     private static void selectAllUser(){
    78. 79         SqlSession session=DBTools.getSession();
    79. 80         UserMapper mapper=session.getMapper(UserMapper.class);
    80. 81         try {
    81. 82         List<UserBean> user=mapper.selectAllUser();
    82. 83         System.out.println(user.toString());
    83. 84         session.commit();
    84. 85         } catch (Exception e) {
    85. 86             e.printStackTrace();
    86. 87             session.rollback();
    87. 88         }
    88. 89     }
    89. 90     
    90. 91
    91. 92 }
    复制代码


      
    测试结果
    insert。
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-17 06:42 , Processed in 0.401841 second(s), 50 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表