• 第一章 Mybtais的两种启动方式


    Mybatis的两种启动方式如下:

      1.xml实现:

      xml的实现方式中,主要是通过手动创建SqlSession,然后调用session.selectOne()方法实现来实现。

      首先是创建Configuration.xml文件:

    <?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>
        <!-- 为每个model类配置别名 -->
        <typeAliases> 
            <typeAlias alias="User" type="com.xxx.mybatis.model.User"/> 
        </typeAliases> 
    
        <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://127.0.0.1:3306/mytest" />
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
                </dataSource>
            </environment>
        </environments>
        
        <!-- 手动加载model的映射xml文件 -->
        <mappers>
            <mapper resource="mapper/User.xml"/>
        </mappers>
    </configuration>
    View Code

       Configuration.xml文件中主要是为每个model对象起一个别名,然后在具体的映射文件中可以直接使用这些定义的别名。

      文件中同时还需手动引入每一个配置的xml映射文件。此部分配置在引入自动扫描后可省略。

      User.java类代码如下:

     1 package com.xxx.model;
     2 
     3 public class User {
     4     
     5     private int id;
     6     private String userName;
     7     private String userAge;
     8     private String userAddress;
     9     
    10     public int getId() {
    11         return id;
    12     }
    13     public void setId(int id) {
    14         this.id = id;
    15     }
    16     public String getUserName() {
    17         return userName;
    18     }
    19     public void setUserName(String userName) {
    20         this.userName = userName;
    21     }
    22     public String getUserAge() {
    23         return userAge;
    24     }
    25     public void setUserAge(String userAge) {
    26         this.userAge = userAge;
    27     }
    28     public String getUserAddress() {
    29         return userAddress;
    30     }
    31     public void setUserAddress(String userAddress) {
    32         this.userAddress = userAddress;
    33     }
    34 
    35 }
    View Code

      配置User.xml文件

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    
    <mapper namespace="com.xxx.models.UserMapper">
        <!-- resultType与Configuration中的别名对应 -->
        <select id="selectUserByID" parameterType="int" resultType="User">
            select * from `user` where id = #{id}
        </select>
    </mapper>
    
    <!-- useGeneratedKeys设置为"true"表明要MyBatis获取由数据库自动生成的主键;keyProperty="id"指定把获取到的主键值注入到User的id属性-->
    <insert id="addUser" parameterType="User" useGeneratedKeys="true" keyProperty="id">
        insert into user(userName,userAge,userAddress)
        values(#{userName},#{userAge},#{userAddress})
      </insert>
    View Code

      以#{id}的形式引用User参数的id属性,MyBatis将使用反射读取User参数的属性。

         至此Mybatis启动文件配置完成,开始编写启动类:

     1 public class Test {
     2   private static SqlSessionFactory sqlSessionFactory;
     3   private static Reader reader;
     4 
     5   static {
     6     try {
     7       reader = Resources.getResourceAsReader("Configuration.xml");
     8       sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
     9     } catch (Exception e) {
    10       e.printStackTrace();
    11     }
    12   }
    13 
    14   public static void main(String[] args) {
    15       SqlSession session = sqlSessionFactory.openSession();
    16 
    17        SqlSession session = sqlSessionFactory.openSession();
    18         try {
    19     // com.xxx.model.UserMapper应与User.xml中的namespace完全对应
    20         User user = session.selectOne("com.xxx.model.UserMapper.selectUserByID", 1);
    21 
    22             System.out.println(user.getUserAddress());
    23             System.out.println(user.getUserName());
    24         } finally {
    25             session.close();
    26         }
    27   }  
    28 
    29 }
    View Code

      2.xml + 接口 实现

      在实现方式一中,selectOne()中的参数应与映射的User.xml文件中的namespace完全对应,不够灵活,也增加了出错的可能性。可以使用xml加接口的形式来代替。

      首先增加接口类IUserMapper:  

     1 package com.xxx.mapper;
     2 
     3 import com.netease.model.User;
     4 import java.util.List;
     5 
     6 public interface IUserMapper {
     7     public User selectUserByID(int id);
     8 
     9     public void addUser(User user);
    10 }
    View Code

      此处的方法名与User.xml文件中的id对应。同时将User.xml中的namespace改为:

        <mapper namespace="com.netease.mapper.IUserMapper">

      此时调用方式如下:

    public static void main(String[] args) {
            SqlSession session = sqlSessionFactory.openSession();
            try {
                IUserMapper mapper = session.getMapper(IUserMapper.class);
                User user = mapper.selectUserByID(1);
            } finally {
                session.close();
            }
        }
    View Code

       Mybatis调用sql的方式总结为以上两种,一种是通过sqlSession的selectOne(),insert()等方法直接匹配调用xml中的sql语句;

      另一种是定义接口,再通过接口调用,程序中只有接口的定义,而没有接口的实现类,调用过程中实际上是调用了Mybatis实现的接口代理类。

      这两种实现方式的深层次分析,将在后续章节中继续分析。

      3.集成spring

      在方式2中,sqlSessionFactory,sqlSession与定义的接口都通过手动实例化,将spring集成进来之后,sqlSessionFactory与sqlSession都将交给spring管理。

      首先配置spring的配置文件applicationContext.xml:

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4        xmlns:context="http://www.springframework.org/schema/context"
     5        xmlns:aop="http://www.springframework.org/schema/aop"
     6        xsi:schemaLocation="http://www.springframework.org/schema/beans
     7        http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
     8         http://www.springframework.org/schema/context
     9         http://www.springframework.org/schema/context/spring-context-3.1.xsd
    10         http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd"
    11        default-autowire="byName">
    12 
    13     <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
    14         <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    15         <property name="url" value="jdbc:mysql://127.0.0.1:3306/mytest?characterEncoding=utf8"/>
    16         <property name="username" value="root"/>
    17         <property name="password" value="123456"/>
    18     </bean>
    19 
    20     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    21         <!--dataSource属性指定要用到的连接池-->
    22         <property name="dataSource" ref="dataSource"/>
    23         <!--configLocation属性指定mybatis的核心配置文件-->
    24         <property name="configLocation" value="classpath:Configuration.xml"/>
    25         <!-- 所有配置的mapper文件 -->
    26         <property name="mapperLocations" value="classpath*:mapper/*.xml" />
    27     </bean>
    28 
    29     <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    30         <property name="dataSource" ref="dataSource" />
    31     </bean>
    32 
    33     <!-- 方式一 为每个接口定义一个bean -->
    34     <!--<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">-->
    35         <!--&lt;!&ndash;sqlSessionFactory属性指定要用到的SqlSessionFactory实例&ndash;&gt;-->
    36         <!--<property name="sqlSessionFactory" ref="sqlSessionFactory"/>-->
    37         <!--&lt;!&ndash;mapperInterface属性指定映射器接口,用于实现此接口并生成映射器对象&ndash;&gt;-->
    38         <!--<property name="mapperInterface" value="com.xxx.mapper.IUserMapper"/>-->
    39     <!--</bean>-->
    40 
    41     <!-- 方式二 Mybatis自动扫描接口 -->
    42     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    43         <property name="basePackage" value="com.xxx.mapper" />
    44     </bean>
    45 </beans>
    View Code

      此时User.xml文件中的导入映射文件的配置可以删除,User.xml中只是配置model的别名。

      与spring集成后,可通过spring注入获取接口,然后直接调用接口的方法:  

      @Autowired
      IUserMapper userMapper;

  • 相关阅读:
    Java——IO输入/输出
    高级查询---嵌套and分页
    Spring mvc拦截器
    SpringMVC实现文件下载
    SpringMVC是实现文件上传
    初始化参数绑定(日期)
    数据校验
    Web Service
    可以用代码发邮件了哦
    JavaMail和James
  • 原文地址:https://www.cnblogs.com/jian-xiao/p/5994623.html
Copyright © 2020-2023  润新知