Java web开发(12)Mybatis入门

入门案例操作一个单表,user,在数据库hello中

表结构

  Field Type Comment
id int(11) NOT NULL  
  username varchar(32) NOT NULL 用户名称
  birthday date NULL 生日
  sex char(1) NULL 性别
  address varchar(256) NULL 地址

对应的User.java文件,包名com.legion.hello

public class User {
    
    //属性名和数据库表的字段对应
    private int id;
    private String username;// 用户姓名
    private String sex;// 性别
    private Date birthday;// 生日
    private String address;// 地址
//getter and setter
...
}

本节简单目标:通过id查询一行数据。

操作步骤:

1.新建一个简单Maven 普通jar工程。

pom.xml内容如下

<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.nothing</groupId>
    <artifactId>MyBatisDay01</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.6</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.40</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
    </dependencies>
</project>

2.

新建一个source folder ,config,里面新建2个log4j.properties和SqlMapConfig.xml

# Global logging configuration
#u5728u5f00u53d1u73afu5883u4e0bu65e5u5fd7u7ea7u522bu8981u8bbeu7f6eu6210DEBUGuff0cu751fu4ea7u73afu5883u8bbeu7f6eu6210infou6216error
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

 别名定义

在SqlMapConfig.xml中使用标签,<typeAliases>,提供包名,那么Mapper配置文件中,对于POJO类,使用类名代替类的完整路径,

比如user代替com.legion.ssm.dao.User

    <!-- 别名定义 -->
    <typeAliases>
        

        <!-- 批量别名定义 
        指定包名,mybatis自动扫描包中的po类,自动定义别名,别名就是类名(首字母大写或小写都可以)
        -->
        <package name="cn.itcast.ssm.po"/>
        
    </typeAliases>
<?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>

    
    <!-- 和spring整合后 environments配置将废除-->
    <environments default="development">
        <environment id="development">
        <!-- 使用jdbc事务管理,事务控制由mybatis-->
            <transactionManager type="JDBC" />
        <!-- 数据库连接池,由mybatis管理-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/hello" />
                <property name="username" value="root" />
                <property name="password" value="123456" />
            </dataSource>
        </environment>
    </environments>
    <!-- 加载 映射文件 -->
    <mappers>
        
        <package name="com.legion.mapper"/>

    </mappers>
    
</configuration>

3.编写DAO接口UserMapper.java和其映射文件UserMapper.xml。

package com.legion.mapper;

import com.legion.hello.User;

public interface UserMapper {
    public User findUserById(int id) throws Exception;
}

UserMapper.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.legion.mapper.UserMapper">
    <select id="findUserById" parameterType="int"
        resultType="com.legion.hello.User">
        select * from user where id=#{value}
    </select>
</mapper>

注意:遵循下述规范,MyBatis会为UserMapper接口生成代理对象

1.两个文件都属于包com.legion.mapper,已经在SqlMapperConfig中配置,通过搜索包名加载所有映射文件。

2.mapper.xml中的namespace就是UserMapper接口全路径。

3.UserMapper.java 中的 方法名和UserMapper.xml中的statement id一致。

4.接口方法输入参数类型和xml中的对应statement 的parameterType类型一致。

5.接口方法的返回值类型和xml中的对应statement的resultType类型一致。

测试代码

public class MyTest {
    private SqlSessionFactory sqlSessionFactory;
    @Before
    public void setup() throws Exception{
        String resource = "SqlMapConfig.xml";
        // 得到配置文件流
        InputStream inputStream = Resources.getResourceAsStream(resource);

        // 创建会话工厂,传入mybatis的配置文件信息
        sqlSessionFactory = new SqlSessionFactoryBuilder()
                .build(inputStream);
    }
    @Test
    public void testFindUserByName() throws Exception{
        SqlSession session=sqlSessionFactory.openSession();
        UserMapper userMapper=session.getMapper(UserMapper.class);
        User user=userMapper.findUserById(25);
        System.out.println(user);
    }
}
原文地址:https://www.cnblogs.com/legion/p/9542772.html