zoukankan      html  css  js  c++  java
  • MyBatis(一)

    • 使用myBatis步骤
    1. 创建maven工程,添加依赖jar包
       1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       2     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
       3     <modelVersion>4.0.0</modelVersion>
       4     <groupId>cn.zjr</groupId>
       5     <artifactId>MyBatis-day01-config</artifactId>
       6     <version>0.0.1-SNAPSHOT</version>
       7     <dependencies>
       8           <dependency>
       9               <groupId>org.mybatis</groupId>
      10               <artifactId>mybatis</artifactId>
      11               <version>3.4.6</version>
      12           </dependency>
      13         <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
      14         <dependency>
      15             <groupId>mysql</groupId>
      16             <artifactId>mysql-connector-java</artifactId>
      17             <version>5.1.47</version>
      18         </dependency>
      19         <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
      20           <dependency>
      21               <groupId>junit</groupId>
      22               <artifactId>junit</artifactId>
      23               <version>4.12</version>
      24           </dependency>
      25     </dependencies>
      26 </project>


          

      2.创建全局配置文件  

      该配置文件包含了对 MyBatis 系统的核心设置,包含获取数据库连接实例的数据源(DataSource)和决定事务作用域和控制方式的事务管理器  TransactionManager)。    

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE configuration
      PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
      "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
        <environments default="development">
            <environment id="development">
                <transactionManager type="JDBC" />
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.jdbc.Driver" />
                    <property name="url"
                        value="jdbc:mysql://localhost:3306/testbatis?characterEncoding=utf-8" />
                    <property name="username" value="root" />
                    <property name="password" value="1234" />
                </dataSource>
            </environment>
        </environments>
        <mappers>
            <!-- 关联映射文件 -->
        <mapper resource="cn/zjr/pojo/UserMapper.xml"/>
    
        </mappers>
    
    </configuration>

          

      3.定义User实体类

        

      4.创建映射文件UserMapper.xml 

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE mapper
     3   PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     4   "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
     5 <!-- namespace 名称空间:作用是用来区分各个xml映射文件的 -->
     6 <mapper namespace="cn.zjr.pojo.User">
     7     <select id="query" resultType="cn.zjr.pojo.User">
     8         select * from t_user
     9     </select>
    10     <insert id="addUser" parameterType="cn.zjr.pojo.User">
    11         insert into t_user(name,gender) values(#{name},#{gender})
    12     </insert>
    13     <update id="updateUser" parameterType="cn.zjr.pojo.User">
    14         update t_user set name=#{name},gender=#{gender} where id=#{id}
    15     </update>
    16     <delete id="deleteUserById" parameterType="int">
    17         delete from t_user where id=#{id}
    18     </delete>
    19 </mapper>

      5.将映射文件添加到主配置文件中

      

      6. 编写测试类(增删改查)

     1 package cn.zjr.test;
     2 import java.io.IOException;
     3 import java.io.InputStream;
     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 import cn.zjr.pojo.User;
    13 
    14 public class MyBatisTest {
    15     //查询
    16     @Test
    17     public void query() throws IOException {
    18         //加载全局配置文件
    19     InputStream in = Resources.getResourceAsStream("MyBatis-config.xml");
    20     //获取SqlSessionFactory
    21     SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
    22     //获取SqlSession对象
    23     SqlSession session = factory.openSession();
    24     
    25     //执行数据库操作   namespace+"."+id
    26     List<User> list = session.selectList("cn.zjr.pojo.User.query");
    27     for (User user : list) {
    28         System.out.println(user);
    29     }
    30     //关闭
    31     in.close();
    32     
    33     
    34     }
    35     //添加
    36     @Test
    37     public void addUser() throws IOException {
    38         InputStream in = Resources.getResourceAsStream("MyBatis-config.xml");
    39         SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
    40         SqlSession session = factory.openSession();
    41         //执行数据库操作
    42         User user = new User();
    43         user.setName("花花");
    44         user.setGender("男");
    45         int count = session.insert("cn.zjr.pojo.User.addUser", user);
    46         session.commit();
    47         System.out.println("影响的行数"+count);
    48         session.close();
    49     }
    50     //修改
    51     @Test
    52     public void updateUser() throws IOException {
    53         
    54         InputStream in = Resources.getResourceAsStream("MyBatis-config.xml");
    55         SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
    56         SqlSession session = factory.openSession();
    57         //执行数据库操作
    58         User user = new User();
    59         user.setId(3);
    60         user.setName("Tony");
    61         user.setGender("男");
    62         int count = session.update("cn.zjr.pojo.User.updateUser", user);
    63         session.commit();
    64         System.out.println("影响的行数"+count);
    65         session.close();
    66     }
    67     //删除
    68     @Test
    69     public void deleteUserById() throws IOException {
    70         InputStream in = Resources.getResourceAsStream("MyBatis-config.xml");
    71         SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
    72         SqlSession session = factory.openSession();
    73         int count = session.update("cn.zjr.pojo.User.deleteUserById", 7);
    74         session.commit();
    75         System.out.println("影响的行数"+count);
    76         session.close();
    77     }
    81 }

      7.优化:

        封装获取Session和SqlSessionFactory对象的工具类 

    package cn.zjr.util;
    
    import java.io.IOException;
    import java.io.InputStream;
    
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    
    public class Dbutils {
        private static InputStream in;
        private static SqlSessionFactory factory =null;
        
        public static SqlSessionFactory getSqlSessionFactory(){
            try {
                in=Resources.getResourceAsStream("mybatis-config.xml");
                factory = new SqlSessionFactoryBuilder().build(in);
            } catch (IOException e) {
                e.printStackTrace();
            }
            return factory;
            
        } 
    }

       通过代理模式实现对象创建

       

     1 package cn.zjr.test;
     2 
     3 import java.lang.reflect.InvocationHandler;
     4 import java.lang.reflect.Method;
     5 import java.lang.reflect.Proxy;
     6 import java.util.List;
     7 
     8 import org.apache.ibatis.session.SqlSession;
     9 
    10 import cn.zjr.dao.IUserDao;
    11 import cn.zjr.pojo.User;
    12 import cn.zjr.util.Dbutils;
    13 
    14 public class TestProxy {
    15     public static void main(String[] args) {
    16         IUserDao proxy = (IUserDao) Proxy.newProxyInstance(TestProxy.class.getClassLoader(), new Class[] {IUserDao.class}, new InvocationHandler() {
    17             
    18             public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
    19             SqlSession session = Dbutils.getSqlSessionFactory().openSession(true);
    20             String methodName = method.getName();
    21             String statement = IUserDao.class.getName()+"."+methodName;
    22             if (methodName.contains("query")) {
    23                 
    24                 return session.selectList(statement,args);
    25                 }
    26             return null;
    27             }
    28         });
    29         List<User> users = proxy.query();
    30         for (User user : users) {
    31             System.out.println(user);
    32         }
    33     
    34     
    35     }
    36     
    37 }

        对代理模式进行优化:使用MyBatis封装好的代理   

     1 package cn.zjr.test;
     2 
     3 import java.util.List;
     4 
     5 import org.apache.ibatis.session.SqlSession;
     6 
     7 import cn.zjr.dao.IUserDao;
     8 import cn.zjr.pojo.User;
     9 import cn.zjr.util.Dbutils;
    10 
    11 public class TestMyBatisProxy {
    12     public static void main(String[] args) {
    13         SqlSession session = Dbutils.getSqlSessionFactory().openSession();
    14         IUserDao userDao = session.getMapper(IUserDao.class);
    15         List<User> list = userDao.query();
    16         for (User user : list) {
    17             System.out.println(user);
    18         }
    19     }
    20 }

      对映射文件UserMapper.xml进行优化,改写为IUserDao.xml文件,并配置到主配置文件中  

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE mapper
     3   PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     4   "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
     5  <mapper namespace="cn.zjr.dao.IUserDao">
     6      <select id="query" resultType="cn.zjr.pojo.User">
     7          select * from t_user
     8      </select>
     9      <insert id="addUser" parameterType="cn.zjr.pojo.User">
    10      
    11          insert into t_user(name,gender) values(#{name},#{gender})
    12      </insert>
    13      <update id="updateUserById" parameterType="cn.zjr.pojo.User">
    14          update t_user set name=#{name},gender=#{gender} where id=#{id}
    15      </update>
    16      <delete id="deleteById" parameterType="int">
    17          delete from t_user where id=#{id}
    18      
    19      </delete>
    20      <select id="queryById" resultType="cn.zjr.pojo.User">
    21          select * from t_user where id=#{uid}
    22      </select>
    23  
    24  </mapper>

      

     

  • 相关阅读:
    转基因(转载)
    Diwali
    使用Matplotlib画图
    项目格式规范
    关于Dapper
    JQuery
    javascript封装
    2015年2月16日——作者观点
    2015年2月12日——不懂点
    在VS2013上使用git
  • 原文地址:https://www.cnblogs.com/zang1998/p/11172917.html
Copyright © 2011-2022 走看看