在IntelliJ IDEA上使用Maven搭建SSM框架(二)

1.配置MyBatis


首先在MySQL数据库中创建简单测试的数据库



然后在项目src/main/java上新建一个实体的包: org.first.entity 和dao层的包:org.first.dao

在entity包下创建实体类,User.java (实体类名与表名一致)

public class User {

    private int id;

    private String name;

    private int sex;

    private Date createTime;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getSex() {
        return sex;
    }

    public void setSex(int sex) {
        this.sex = sex;
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", sex=" + sex +
                ", createTime=" + createTime +
                '}';
    }
}

在dao包中创建Dao接口,UserDao.java

public interface UserDao {

    /**
     * 根据偏移量查询用户列表
     * @param offser
     * @param limit
     * @return
     */
    List<User> queryAll(@Param("offset") int offser,@Param("limit") int limit);

    int insertUser(User user);

}

在src/main/resources下创建MyBatis配置文件mybatis-config.xml 和 mapper包(存放MyBatis的SQL映射)

打开MyBatis的官方文档  点击打开链接

选择入门标签,找到MyBatis全局配置 复制dtd 到 mybatis-config.xml 中开始配置MyBatis

<?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>
    <!-- 配置全局属性 -->
    <settings>
        <!-- 使用jdbc的getGeneratedKeys 获取数据可自增主键值 -->
        <setting name="useGeneratedKeys" value="true"/>
        <!-- 使用列别名替代列名 默认:true -->
        <setting name="useColumnLabel" value="true"/>
        <!-- 开启驼峰命名转换:Table(create_time)-> Entity(createTime) -->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
</configuration>

使用mapper实现Dao接口,在mapper包下创建 UserDao.xml,在官方文档xml配置找到他的事例,复制dtd 

<?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="org.first.dao.UserDao">
    <!-- 为DAO接口方法提供SQL语句配置 -->
    <!-- 根据方法选择标签update,delete,select,insert-->
    <select id="queryAll" resultType="User">
        select id,name,sex,create_time
        from user
        order by create_time desc
        limit #{offset},#{limit}
    </select>

    <insert id="insertUser" parameterType="User">
        insert into user (id,name,sex,create_time)
        values (#{id},#{name},#{sex},now())
    </insert>
</mapper>

namespace为Dao的路径,id为Dao的方法名,resultType为返回值类型,parameterType为传入参数类型

2.MyBatis整合Spring

实现更少的编码,只写接口,不写实现。

在src/main/resources下创建jdbc.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8
username=你的用户名
password=你的密码

在src/main/resources下创建spring包,并创建spring-dao.xml 配置所有dao相关的配置

查看spring的官方文档:(根据自己的版本号选择)



选择pdf查看官方文档,编写xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    <!-- 配置整合MyBatis -->
    <!-- 1:配置数据库相关参数 -->
    <context:property-placeholder location="classpath:jdbc.properties" system-properties-mode="FALLBACK"/>
    <!-- 2:数据库连接池 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <!-- 配置连接池属性 -->
        <property name="driverClass" value="${driver}"/>
        <property name="jdbcUrl" value="${url}"/>
        <property name="user" value="${username}"/>
        <property name="password" value="${password}"/>

        <!-- c3p0连接池的私有属性 -->
        <property name="maxPoolSize" value="30"/>
        <property name="minPoolSize" value="10"/>
        <property name="autoCommitOnClose" value="false"/>
        <property name="checkoutTimeout" value="1000"/>
        <!-- 当获取连接失败重试次数 -->
        <property name="acquireRetryAttempts" value="2"/>
    </bean>

    <!-- 3:配置SQLSessionFactory对象 -->
    <bean id="sqlSessionFactroy" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 注入数据库连接池 -->
        <property name="dataSource" ref="dataSource"/>
        <!-- 配置MyBatis全局配置文件:mybatis-config.xml -->
        <property name="configLocation" value="classpath:mybatis-config.xml"/>
        <!-- 扫描entity包 使用别名 -->
        <property name="typeAliasesPackage" value="org.first.entity"/>
        <!-- 扫描sql配置文件:mapper需要的xml文件 -->
        <property name="mapperLocations" value="classpath:mapper/*.xml"/>
    </bean>

    <!-- 4:配置扫描Dao接口包,动态实现Dao接口,注入到spring容器中 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!-- 注入SQLSessionFactory -->
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactroy"/>
        <!-- 给出需要扫描Dao接口包 -->
        <property name="basePackage" value="org.first.dao"/>
    </bean>
</beans>

注意:jdbc.properties中的username会从系统环境中读取用户名,据我所知有两种解决方法:
(1)修改jdbc.properties中的username为jdbc.username
(2)在spring-dao.xml的context标签中添加 system-properties-mode="FALLBACK"
我在该例中使用的是第二种方法。

可自行用junit测试。

@RunWith(SpringJUnit4ClassRunner.class)
/*junit加载spring配置文件*/
@ContextConfiguration({"classpath:spring/spring-dao.xml"})
public class UserDaoTest {

    @Resource
    private UserDao userDao;

    @Test
    public void queryAll() throws Exception {
        List<User> users=userDao.queryAll(0,5);
        for(User user:users){
            System.out.println(user);
        }
    }

    @Test
    public void insertUser() throws Exception {
        User user=new User();
        user.setName("小花");
        user.setSex(0);
        int result=userDao.insertUser(user);
        System.out.println(result);
    }
}







版权声明:本文为q1119823309原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。