• Spring + Mybatis应该如何配置


    ### 1. MYBATIS简介

    MYBATIS是持久层框架,大大的简化了持久层开发。

    当使用MYBATIS框架时,开发人员不必再编写繁琐的JDBC代码,只需要定义好每个功能对应的抽象方法与需要执行的SQL语句即可!

    ### 2. 基本使用

    #### 2.1. 添加依赖

    需要在`pom.xml`中添加MyBatis的依赖:

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.6</version>
        </dependency>

    然后添加MyBatis整合Spring的依赖:

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.3.2</version>
        </dependency>

    其底层实现是基于JDBC的,所以,还需要添加`spring-jdbc`的依赖,需要注意的是:此次使用的版本必须与`spring-webmvc`的保持一致:

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>4.3.9.RELEASE</version>
        </dependency>

    根据使用的数据库,添加数据库连接驱动的依赖:

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.13</version>
        </dependency>

    添加数据源的依赖:

        <dependency>
            <groupId>commons-dbcp</groupId>
            <artifactId>commons-dbcp</artifactId>
            <version>1.4</version>
        </dependency>

    #### 2.2. 数据库连接

    在`src/main/resources`下创建`db.properties`文件,用于配置数据库连接的相关信息:

    #数据库驱动
    driver=com.mysql.cj.jdbc.Driver
    #数据库连接
    url=jdbc:mysql://localhost:3306/tedu_ums?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
    #数据库用户名
    username=root
    #数据库密码
    password=
    #数据库连接池初始连接数
    initialSize=3
    #数据库连接池最连接线程数
    maxActive=5


    在项目中准备名为`spring-dao.xml`的Spring配置文件,并加载以上数据库的配置文件:

        <!-- 加载数据库的配置文件 -->
        <util:properties id="dbConfig" 
            location="classpath:db.properties" />

    然后,将以上读取到的配置值应用于数据源`BasicDataSource`中:

        <!-- 配置数据源 -->
        <bean class="org.apache.commons.dbcp.BasicDataSource">
            <property name="url" 
                value="#{dbConfig.url}" />
            <property name="driverClassName"
                value="#{dbConfig.driver}" />
            <property name="username"
                value="#{dbConfig.username}" />
            <property name="password"
                value="#{dbConfig.password}" />
            <property name="initialSize"
                value="#{dbConfig.initialSize}" />
            <property name="maxActive"
                value="#{dbConfig.maxActive}" />
        </bean>

    以上配置时,各文件之间的关系如下图所示:

    完成后,可以通过单元测试,以测试是否可以正确的获取到数据库的连接:

        public class ConnectionTestCase {
        
            @Test
            public void getConnection() throws SQLException {
                AbstractApplicationContext ac
                    = new ClassPathXmlApplicationContext(
                            "spring-dao.xml");
                
                DataSource dataSource = 
                        ac.getBean("dataSource", DataSource.class);
                
                System.out.println(dataSource.getConnection());
                
                ac.close();
            }
            
        }

    #### 2.3. 创建实体类

    每张数据表都应该有1个对应的实体类,所以,创建`cn.tedu.mybatis.entity.User`类,属性的数量与类型请参考数据表的设计:

        public class User implements Serializable {
    
            private static final long serialVersionUID = 7323921614984096421L;
        
            private Integer id;
            private String username;
            private String password;
            private Integer age;
            private String phone;
            private String email;
            // SET/GET,toString()
        }

    #### 2.4. 创建接口,声明抽象方法

    创建`cn.tedu.mybatis.mapper.UserMapper`接口,并在接口中声明“插入用户数据”的抽象方法:

        public interface UserMapper {
        
            Integer addnew(User user);
            
        }


    关于抽象方法,在MyBatis中,执行的操作如果是增、删、改,返回值均使用`Integer`,表示受影响的行数;方法的名称可以自定义,只要不违反Java的命名规则即可,另外,不允许在接口中使用重载机制;参数也可以自定义,如果执行的是增加操作,参数应该是与数据表对应的实体类的类型。

    #### 2.5. 配置接口所在的包

    在MyBatis中,通过`MapperScannerConfigurer`类扫描持久层接口的,所以,应该在`spring-dao.xml`文件中进行配置:

        <!-- MapperScannerConfigurer -->
        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <!-- 配置接口文件所在的包 -->
            <property name="basePackage"
                value="cn.tedu.mybatis.mapper" />
        </bean>

    从FTP下载`somemapper.zip`压缩包,得到`SomeMapper.xml`文件。

    在`src/main/resources`下创建名为`mappers`文件夹,然后将`SomeMapper.xml`重命名为`UserMapper.xml`,并粘贴到`mappers`文件夹下:

    > 其实,这些XML文件的名称并不重要,可以自由命名,通常,推荐使用与接口文件相同的名称,便于管理。

    然后,编写`UserMapper.xml`文件中的内容,首先,根节点必须是`<mapper>`,且根节点的`namespace`表示对应的接口文件,然后,添加子节点,以对应接口中的抽象方法:

    #### 2.7. 配置XML文件的位置与数据源

    MyBatis通过`SqlSessionFactoryBean`获取数据源,并且扫描配置了SQL语句的XML文件,最终由MyBatis框架来执行SQL语句,所以,需要在`spring-dao.xml`中配置`SqlSessionFactoryBean`:

        <!-- SqlSessionFactoryBean -->
        <bean class="org.mybatis.spring.SqlSessionFactoryBean">
            <!-- 数据源,值为以上配置BasicDataSource节点的bean-id -->
            <property name="dataSource" 
                ref="dataSource" />
            <!-- XML文件在哪里 -->
            <property name="mapperLocations" 
                value="classpath:mappers/*.xml" />
        </bean>

    #### 2.8. 单元测试

        public class UserMapperTestCase {
        
            AbstractApplicationContext ac;
            UserMapper mapper;
            
            @Before
            public void doBefore() {
                ac = new ClassPathXmlApplicationContext("spring-dao.xml");
                mapper = ac.getBean("userMapper", UserMapper.class);
            }
            
            @After
            public void doAfter() {
                ac.close();
            }
            
            @Test
            public void addnew() {
                User user = new User();
                user.setUsername("刘GB");
                user.setPassword("666");
                Integer rows = mapper.addnew(user);
                System.out.println("rows=" + rows);
            }
            
        }

    ### 3. 查询数据

    #### 3.1. 根据id查询某个用户的信息

    首先,在`UserMapper.java`接口中添加该功能对应的抽象方法:

    User findById(Integer id);

    > 查询方法的返回可以根据所需要的类型来决定。

    然后,在`UserMapper.xml`映射文件中添加新的节点配置抽象方法对应的SQL语句:

        <select id="findById"
            resultType="cn.tedu.mybatis.entity.User">
            SELECT 
                id, username, 
                password, age, 
                phone, email
            FROM 
                t_user
            WHERE 
                id=#{id}
        <select>

    > 执行查询时,`<select>`节点中必须配置`resultType`属性(或者是`resultMap`属性)。

    以上方法执行时,如果查询到匹配的数据,则返回有效的User对象,如果没有匹配的数据,则返回null。

  • 相关阅读:
    MySQL重置密码
    linux下自动备份脚本并上传到ftp服务器
    nginx配置
    WIFI防蹭网
    无线路由知识
    009汇编环境搭建
    008 计算机不会加法
    007计算机不会做加法
    006源码反码补码
    005有符号数和无符号数
  • 原文地址:https://www.cnblogs.com/topzhao/p/10310695.html
Copyright © 2020-2023  润新知