Mybatis用法详解(配置和注解的使用)

mybatis是持久层框架

使用方法(基于xml配置)

1.添加依赖(Maven)
[html] view plain copy
 
  1. <!--数据库相关, mysql, mybatis-->  
  2.     <!--jdbc连接-->  
  3.     <dependency>  
  4.         <groupId>mysql</groupId>  
  5.         <artifactId>mysql-connector-java</artifactId>  
  6.         <version>5.1.37</version>  
  7.     </dependency>  
  8.     <!--spring-mybatis  -->  
  9.     <dependency>  
  10.         <groupId>org.mybatis</groupId>  
  11.         <artifactId>mybatis-spring</artifactId>  
  12.         <version>${mybatis-spring-version}</version>  
  13.     </dependency>  
  14.     <!--mybatis-->  
  15.     <dependency>  
  16.         <groupId>org.mybatis</groupId>  
  17.         <artifactId>mybatis</artifactId>  
  18.         <version>${mybatis-version}</version>  
  19.     </dependency>  
  20.      <!--反射生成实体类-->  
  21.     <dependency>  
  22.         <groupId>org.mybatis.generator</groupId>  
  23.         <artifactId>mybatis-generator-core</artifactId>  
  24.         <version>1.3.2</version>  
  25.     </dependency>  

2.建立数据库、表
[html] view plain copy
 
  1. CREATE DATABASE testdatabase;  
  2. USE testdatabase;  
  3. CREATE TABLE user(id INT PRIMARY KEY AUTO_INCREMENT, userName VARCHAR(20) NOT NULL, userAge INT NOT NULL);  
[html] view plain copy
 
  1. INSERT INTO user(userName, userAge) VALUES('Xiaoxin', 21);  
  2. INSERT INTO user(userName, userAge) VALUES('Xiaoming', 22);  
3.表的实体类
[html] view plain copy
 
  1. package com.xiaoxin.demo.dto;  
  2.   
  3. public class User {  
  4.     private int id;  
  5.     private String userName;  
  6.     private int userAge;  
  7.     public int getId() {  
  8.         return id;  
  9.     }  
  10.     public void setId(int id) {  
  11.         this.id = id;  
  12.     }  
  13.     public String getUserName() {  
  14.         return userName;  
  15.     }  
  16.   
  17.     public void setUserName(String userName) {  
  18.         this.userName = userName;  
  19.     }  
  20.     public int getUserAge() {  
  21.         return userAge;  
  22.     }  
  23.     public void setUserAge(int userAge) {  
  24.         this.userAge = userAge;  
  25.     }  
  26.     @Override  
  27.     public String toString() {  
  28.         return "User [id=" + id + ", userName=" + userName + ", userAge=" + userAge + "]";  
  29.     }  
  30. }  

4.添加Mybatis的配置文件
[html] view plain copy
 
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  
  3. "http://mybatis.org/dtd/mybatis-3-config.dtd">  
  4. <configuration>  
  5.     <typeAliases>   
  6.         <typeAlias alias="User" type="com.xiaoxin.demo.dto.User"/>   
  7.     </typeAliases>   
  8.     <!-- 数据库环境配置-->  
  9.     <environments default="development">  
  10.         <environment id="development">  
  11.         <!-- jdbc管理-->  
  12.         <transactionManager type="JDBC"/>  
  13.          <!-- 用什么连接池-->  
  14.             <dataSource type="POOLED">  
  15.              <!-- jdbc驱动-->  
  16.             <property name="driver" value="com.mysql.jdbc.Driver"/>  
  17.             <!-- 数据库名字url-->  
  18.             <property name="url" value="jdbc:mysql://127.0.0.1:3306/testdatabase" />  
  19.             <!-- 数据库用户-->  
  20.             <property name="username" value="root"/>  
  21.             <!-- 数据库用户密码-->  
  22.             <property name="password" value=""/>  
  23.             </dataSource>  
  24.         </environment>  
  25.     </environments>  
  26.     <!-- 把User.xml注册到mybatis的配置文件中,User.xml下面配置 -->  
  27.     <mappers>  
  28.         <mapper resource="com/xiaoxin/demo/dto/User.xml"/>  
  29.     </mappers>  
  30. </configuration>  

5.定义操作user表的映射文件,第四步已经注册到mybatis的配置文件中去了
[html] view plain copy
 
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"   
  3. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
  4. <!-- 定义操作user表的sql映射文件userMapper.xml  -->  
  5. <mapper namespace="com.xiaoxin.demo.dto">  
  6.     <select id="selectUserByID" parameterType="int" resultType="User">  
  7.         select * from `User` where id = #{id}  
  8.     </select>  
  9. </mapper>  

6.测试
[html] view plain copy
 
  1. package com.xiaoxin.demo.dto;  
  2.   
  3. import java.io.Reader;  
  4.   
  5. import org.apache.ibatis.io.Resources;  
  6. import org.apache.ibatis.session.SqlSession;  
  7. import org.apache.ibatis.session.SqlSessionFactory;  
  8. import org.apache.ibatis.session.SqlSessionFactoryBuilder;  
  9. import org.junit.Test;  
  10.   
  11. public class TestUser {  
  12.     @Test  
  13.     public void testUser() throws Exception{  
  14.          SqlSessionFactory sqlSessionFactory;  
  15.          Reader reader;   
  16.          String resource = "spring/configuration.xml";  
  17.          //加载一个流  
  18.          reader= Resources.getResourceAsReader(resource);  
  19.          //生成sqlSessionFactory工厂  
  20.          sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);  
  21.          SqlSession session = sqlSessionFactory.openSession();  
  22.          User user =(User) session.selectOne("com.xiaoxin.demo.dto.selectUserByID", 1);  
  23.          System.out.print(user.toString());  
  24.         session.close();  
  25.           
  26.     }  
  27.       
  28.   
  29. }  

连接数据库成功查询到数据


 
 
CRUD操作汇总
[html] view plain copy
 
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"   
  3. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
  4. <!-- 定义操作users表的sql映射文件userMapper.xml  -->  
  5. <mapper namespace="com.xiaoxin.demo.dto">  
  6.     <!--查询  -->  
  7.      <select id="selectUserAll" parameterType="int" resultType="User">  
  8.         select * from user  
  9.     </select>  
  10.     <!--插入  -->  
  11.     <insert id="insertUser" parameterType="com.xiaoxin.demo.dto.User">  
  12.             insert into user(userName,userAge) values(#{userName},#{userAge});  
  13.     </insert>  
  14.     <!--更新  -->  
  15.     <update id="updateUser" parameterType="com.xiaoxin.demo.dto.User">  
  16.             update user set userAge=#{userAge},userName=#{userName} where id=#{id}  
  17.     </update>  
  18.     <!--删除  -->  
  19.     <delete id="deleteUser" parameterType="int">  
  20.         delete from user where id=#{id}  
  21.     </delete>  
  22.       
  23. </mapper>  
测试
[html] view plain copy
 
  1. package com.xiaoxin.demo.dto;  
  2.   
  3. import java.io.Reader;  
  4. import java.util.List;  
  5.   
  6. import org.apache.ibatis.io.Resources;  
  7. import org.apache.ibatis.session.SqlSession;  
  8. import org.apache.ibatis.session.SqlSessionFactory;  
  9. import org.apache.ibatis.session.SqlSessionFactoryBuilder;  
  10. import org.junit.Test;  
  11.   
  12. public class TestUser {  
  13.     @Test  
  14.     public void testUser() throws Exception{  
  15.          SqlSessionFactory sqlSessionFactory;  
  16.          Reader reader;   
  17.          String resource = "spring/configuration.xml";  
  18.          //加载一个流  
  19.          reader= Resources.getResourceAsReader(resource);  
  20.          //生成sqlSessionFactory工厂  
  21.          sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);  
  22.          SqlSession session = sqlSessionFactory.openSession();  
  23.          //插入  
  24. //       User user1 = new User();  
  25. //       user1.setUserName("Xiaohong");  
  26. //       user1.setUserAge(20);  
  27. //       session.insert("com.xiaoxin.demo.dto.insertUser", user1);  
  28. //       // session.commit();一定要执行不然在数据库中没有信息!!!!!  
  29. //       session.commit();  
  30.         //更新  
  31.          //把Xiaohong的姓名改为Xiaohong101年龄改为44 Xiaohong的id是13  
  32. //       User user3 = new User();  
  33. //       user3.setUserName("Xiaohong101");  
  34. //       user3.setUserAge(44);  
  35. //       user3.setId(16);  
  36. //       session.update("com.xiaoxin.demo.dto.updateUser",user3);  
  37. //       session.commit();  
  38.            
  39.         //删除  
  40.          session.delete("com.xiaoxin.demo.dto.deleteUser",16);  
  41.          session.commit();  
  42.          //查询数据库全部的信息  
  43.          List<Useruser2 = session.selectList("com.xiaoxin.demo.dto.selectUserAll");  
  44.          for(User user:user2){  
  45.              System.out.println(user.toString());  
  46.          }  
  47.         session.close();  
  48.           
  49.     }  
  50.       
  51.   
  52. }  
以上自己测试过全部成功,但是xml的配置过程中自己出错了很多,调试了很多次才成功调试出来,下面学习基于注解的写法

Mybatis的注解用法

 
1.定义SQL映射的接口
[html] view plain copy
 
  1. package com.xiaoxin.demo.mapper;  
  2.   
  3. import java.util.List;  
  4.   
  5. import org.apache.ibatis.annotations.Delete;  
  6. import org.apache.ibatis.annotations.Insert;  
  7. import org.apache.ibatis.annotations.Select;  
  8. import org.apache.ibatis.annotations.Update;  
  9.   
  10. import com.xiaoxin.demo.dto.User;  
  11.   
  12. public interface UserMapper {  
  13.     @Select("select * from user")  
  14.     public List<User> getSelectUser();  
  15.     @Update("UPDATE user set userName=#{userName},userAge=#{userAge} where id=#{id}")  
  16.     public void getUpdateUser(User user);  
  17.     @Insert("insert into user(userName,userAge) values(#{userName},#{userAge});")  
  18.     public void getInsertUser(User user);  
  19.     @Delete("DELETE FROM user where id=#{id}")  
  20.     public void getDeleteUser(int id);  
  21.       
  22.   
  23. }  
2.在mybatis的配置文件中注册这个映射接口(注意是class!!)
[html] view plain copy
 
  1. <mappers>  
  2.        <mapper resource="com/xiaoxin/demo/dto/User.xml"/>  
  3.        <mapper class="com.xiaoxin.demo.mapper.UserMapper"></mapper>  
  4.    </mappers>  

在Dao类中调用(这里是测试)
[html] view plain copy
 
  1. package com.xiaoxin.demo.dto;  
  2.   
  3. import java.io.IOException;  
  4. import java.io.Reader;  
  5. import java.util.List;  
  6.   
  7. import org.apache.ibatis.io.Resources;  
  8. import org.apache.ibatis.session.SqlSession;  
  9. import org.apache.ibatis.session.SqlSessionFactory;  
  10. import org.apache.ibatis.session.SqlSessionFactoryBuilder;  
  11. import org.junit.Test;  
  12.   
  13. import com.xiaoxin.demo.mapper.UserMapper;  
  14.   
  15. public class TestUserAnnotation {  
  16.       
  17.     @Test  
  18.     public void testUser() throws IOException{  
  19.           
  20.          SqlSessionFactory sqlSessionFactory;  
  21.          Reader reader;   
  22.          String resource = "spring/configuration.xml";  
  23.          //加载一个流  
  24.          reader= Resources.getResourceAsReader(resource);  
  25.          //生成sqlSessionFactory工厂  
  26.          sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);  
  27.          SqlSession session = sqlSessionFactory.openSession();  
  28.            
  29.          UserMapper userMapper = session.getMapper(UserMapper.class);  
  30.          //插入  
  31. //       User user = new User();  
  32. //       user.setUserName("xinxin");  
  33. //       user.setUserAge(20);  
  34. //       userMapper.getInsertUser(user);  
  35. //       session.commit();  
  36.          //删除  
  37. //       userMapper.getDeleteUser(21);  
  38. //       session.commit();  
  39.          //更新将id为19的姓名不变 年龄改为23  
  40. //       User user = new User();  
  41. //       user.setId(19);  
  42. //       user.setUserName("xinxin");  
  43. //       user.setUserAge(23);  
  44. //       userMapper.getUpdateUser(user);  
  45. //       session.commit();  
  46.          //查询  
  47.          List<Userusers = userMapper.getSelectUser();  
  48.          for(User user2 :users){  
  49.              System.out.println(user2.toString());  
  50.          }  
  51.          session.close();  
  52.     }  
  53.   
  54. }  

测试成功
 

posted on 2017-07-07 17:56  alex5211314  阅读(435)  评论(0编辑  收藏  举报

导航