Mybatis(二)简化Mybatis实现数据库操作

 

要操作的数据库:

一、与数据库对应的bean类

public class User {
    private String username;
    private String sex;
    private String address;

    public String getUsername() {
        return username;
    }

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

    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;
    }

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

二、Mapper接口与其对应的映射配置文件(UserMapper接口、UserMapper.xml)

  遵循四个原则:

  1、接口 方法名 与 User.xml 中 id 名要一致
  2、返回值类型 与 Mapper.xml文件中返回值类型要一致
  3、方法的入参类型 与Mapper.xml中入参的类型要一致
  4、命名空间 绑定此接口

(1)、UserMapper接口
import dyh.bean.User;

public interface UserMapper {
    //遵循四个原则
    //接口 方法名  == User.xml 中 id 名
    //返回值类型  与  Mapper.xml文件中返回值类型要一致
    //方法的入参类型 与Mapper.xml中入参的类型要一致
    //命名空间 绑定此接口
    public User findUserById(Integer id);
}
<?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="dyh.mapper.UserMapper">
    <!-- 通过ID查询一个用户 -->
    <select id="findUserById" parameterType="Integer" resultType="User">
        select * from user where id = #{v}
    </select>
</mapper>

三、核心配置文件

  (1)、jdbc.properties文件

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/school?characterEncoding=utf-8
jdbc.username=root
jdbc.password=dyhroot

  (2)、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>
    <!--properties配置文件的应用-->
    <properties resource="jdbc.properties"/>

    <!--别名的应用,一定要特别注意标签是有顺序的,不然会报异常-->
    <typeAliases>
        <!--这样写就是该文件中所有的"dyh.bean.User" 都用User代替了-->
        <!--这样写有一个弊端,就是除了用户之外还有其他实体类,比如Order、Customer…… 那就要写n别名了,所以不推荐使用-->
        <!--<typeAlias type="dyh.bean.User" alias="User"/>-->

        <!--推荐使用包的形式-->
        <package name="dyh.bean"/>
    </typeAliases>

    <environments default="development">
        <environment id="development">
            <!-- 使用jdbc事务管理 -->
            <transactionManager type="JDBC" />
            <!-- 数据库连接池 -->
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}" />
                <property name="url" value="${jdbc.url}" />
                <property name="username" value="${jdbc.username}" />
                <property name="password" value="${jdbc.password}" />
            </dataSource>
        </environment>
    </environments>

    <!-- Mapper的位置  Mapper.xml 写Sql语句的文件的位置 -->
    <mappers>
        <mapper resource="userMapper/UserMapper.xml"/>
        <!--使用mapper接口类路径
        如:<mapper class="cn.itcast.mybatis.mapper.UserMapper"/>
        注意:此种方法要求mapper接口名称和mapper映射文件名称相同,且放在同一个目录中。-->

        <!--<package name="userMapper"/>-->
        
        <!--注册指定包下的所有mapper接口
        如:<package name="cn.itcast.mybatis.mapper"/>
        注意:此种方法要求mapper接口名称和mapper映射文件名称相同,且放在同一个目录中。-->
        
        <!--注意:但是这两种引入sql映射文件的办法,用IDEA的maven工程,这样写有问题,还没找到原因,有可能是不可以这么书写-->
    </mappers>

</configuration>

 

 

  注意:

    因为是IDEA的maven工程,文件目录结构:

四、测试

public class MybatisTest {

    @Test
    public void testMapper() throws Exception {
        //加载核心配置文件
        String resource = "sqlMapConfig.xml";
        InputStream in = Resources.getResourceAsStream(resource);

        //创建SqlSessionFactory
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);

        //创建SqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //SqlSEssion帮我生成一个实现类  (给接口)
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

        User user = userMapper.findUserById(10);
        System.out.println(user);
    }
}

测试结果:

 

 

延展知识点:

一、传递pojo包装对象

  开发中通过可以使用pojo传递查询条件。

  查询条件可能是综合的查询条件,不仅包括用户查询条件还包括其它的查询条件(比如查询用户信息的时候,将用户购买商品信息也作为查询条件),这时可以使用包装对象传递输入参数。

包装对象:Pojo类中的一个属性是另外一个pojo。

  需求:根据用户名模糊查询用户信息,查询条件放到QueryVo的user属性中。

  1、把User类作为一个类的属性

public class QueryVo {
    // 包含其他的pojo
    private User user;

    public User getUser() {
        return user;
    }
    public void setUser(User user) {
        this.user = user;
    }
}

  2、映射文件的书写,核心配置文件是不变的。

  3、UserMapper接口

 

二、resultMap属性的应用(resultMap属性里面包含的属性如下图:)

  

  resultType可以指定将查询结果映射为pojo,但需要pojo的属性名和sql查询的列名一致方可映射成功。

  如果sql查询字段名和pojo的属性名不一致,可以通过resultMap将字段名和属性名作一个对应关系 ,resultMap实质上还需要将查询结果映射到pojo对象中。

  resultMap可以实现将查询结果映射为复杂类型的pojo,比如在查询结果映射对象中包括pojo和list实现一对一查询和一对多查询(下篇笔记讲解)。

 

  1、数据库表字段与实体类属性不一致。

2、映射文件书写

 

转载于:https://www.cnblogs.com/soft2018/p/10131243.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值