Mybatis 环境搭建(使用sqlSession代理,不使用dao实现)

Mybatis 环境搭建(使用sqlSession代理,不使用dao实现)

这边先介绍mybatis 不实现dao,使用SqlSession.getMapper(Clazz)代理的方式的环境搭建。

  1. 创建maven 工程,导入相应的jar 依赖
  2. 准备测试数据文件User以及UserDao
  3. 准备主配置文件SqlMapConfig.xml和mapping.xml
  4. 编写测试代码----

下面上代码

1)pom.xml 依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.hs</groupId>
    <artifactId>mybatistype</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.5</version>
        </dependency>

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

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>

        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
    </dependencies>
</project>

2)创建User实体类和UserDao 接口,注意这里User实体类属性最好与数据库字段名相对应方便开发



以下为数据库sql:
CREATE DATABASE mybatis;
USE mybatis

DROP TABLE IF EXISTS `user`;

CREATE TABLE `user` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `username` VARCHAR(32) NOT NULL COMMENT '用户名称',
  `birthday` DATETIME DEFAULT NULL COMMENT '生日',
  `sex` CHAR(1) DEFAULT NULL COMMENT '性别',
  `address` VARCHAR(256) DEFAULT NULL COMMENT '地址',
  PRIMARY KEY  (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;

------------------------------------------------------------------------------------



以下为User实体类
------------------------------------------------------------------------------------
package domain;

import java.util.Date;

/**
 * @Author: huangshun
 * @Date: 2019/4/29 15:19
 * @Version 1.0
 */
public class User {

    /*
    *  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `username` VARCHAR(32) NOT NULL COMMENT '用户名称',
  `birthday` DATETIME DEFAULT NULL COMMENT '生日',
  `sex` CHAR(1) DEFAULT NULL COMMENT '性别',
  `address` VARCHAR(256) DEFAULT NULL COMMENT '地址',*/
    private Integer id;
    private String username;
    private Date birthday;
    private String sex;
    private String address;

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

    public Integer getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public String getSex() {
        return sex;
    }

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

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}




以下为UserDao接口
----------------------------------------------------------------------------------------

package dao;

import domain.User;

import java.util.List;

/**
 * @Author: huangshun
 * @Date: 2019/4/29 15:21
 * @Version 1.0
 */
public interface UserDao {
    List<User> findAll();
}





3)创建SqlMapConfig.xml和 UserDaoMapping.xml

这里是目录结构

SqlMapConfig.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>
    <environments default="mysql">
        <environment id="mysql">
            <!--选择开始事务的类型 -->
            <transactionManager type="JDBC"></transactionManager>
            <!--连接池的类型 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="UserDaoMapping.xml"></mapper>

    </mappers>
</configuration>



UserDaoMapping.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">
<!-- 这里namespace 为UserDao 的全限定类型  namespace 和下面的id 组成唯一标识-->
 <mapper namespace="dao.UserDao">
    <!-- id唯一 是UserDao里方法名 与namespace 确定是UserDao里哪个方法-->
    <!--resultType:返回值类型,这里返回值类型为User对象 -->
    <select id="findAll" resultType="domain.User">
        select * from user ;
    </select>
</mapper>

4)测试测试代码--

import dao.UserDao;
import domain.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;

/**
 * @Author: huangshun
 * @Date: 2019/4/29 15:30
 * @Version 1.0
 */
public class TestCrud {

    @Test
    public void testFindAll() throws IOException {
        InputStream in= Resources.getResourceAsStream("SqlMapConfig.xml");
        SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(in);
        SqlSession sqlSession = factory.openSession();
        UserDao dao = sqlSession.getMapper(UserDao.class);
        List<User> users = dao.findAll();
        for (User user : users) {
            System.out.println(user);
        }
    }
}

--------- 以下是结果

User{id=41, username='11111', birthday=Tue Feb 27 17:47:08 CST 2018, sex='男', address='北京'}
User{id=42, username='小二王', birthday=Fri Mar 02 15:09:37 CST 2018, sex='女', address='北京金燕龙'}
User{id=43, username='小二王', birthday=Sun Mar 04 11:34:34 CST 2018, sex='女', address='北京金燕龙'}
User{id=45, username='传智播客', birthday=Sun Mar 04 12:04:06 CST 2018, sex='男', address='北京金燕龙'}

ok,结束

附录----这里再加上   resultMap  的使用(一般如果实体类属性名与数据库字段名不对应需要这么配置)

以下是userDaoMapping.xml  配置 resultMap  不使用resulttype

<?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">

<!-- 这里namespace 为UserDao 的全限定类型  namespace 和下面的id 组成唯一标识-->
 <mapper namespace="dao.UserDao">
    <resultMap id="resultMap" type="domain.User">
        <!--id 主键字段的对应 -->
        <id column="id" property="id"/>
        <!--非主键字段的对应 -->
        <result column="username" property="username"/>
        <result column="sex" property="sex"/>
        <result column="birthday" property="birthday"/>
        <result column="address" property="address"></result>
    </resultMap>

    <!-- id唯一 是UserDao里方法名 与namespace 确定是UserDao里哪个方法-->
    <!--resultMap:返回值类型,这里返回值类型为上面配置的resultMap对象  即User-->
    <select id="findAll" resultMap="resultMap">
        select * from user ;
    </select>

    <!--按条件查询用户 -->
    <select id="findByCondition" parameterType="domain.User" resultType="domain.User">
        select * from user
        <where>
            <if test="username!=null"></if>
            and username like #{username}
            <if test="sex!=null">
                and sex =#{sex}
            </if>
        </where>
    </select>

    <!--根据id 集合查询用户 -->
    <select id="findByIds" resultType="domain.User" parameterType="domain.QueryVo">
        select * from user
        <where>
            <if test="ids !=null and ids.size()>0">
             <foreach collection="ids" open="id in (" close=")" item="id" separator="," >
                  #{id}
             </foreach>

            </if>
        </where>
    </select>
</mapper>

猜你喜欢

转载自blog.csdn.net/huangshun9541/article/details/89676244