第一个Mybatis程序

1、首先创建一个数据库

CREATE DATABASE mybatis;
CREATE
TABLE `user`( `id` INT(20) NOT NULL PRIMARY KEY, `name` VARCHAR(30) NOT NULL, `pwd` VARCHAR(30) NOT NULL )ENGINE = INNODB DEFAULT CHARSET=utf8; INSERT INTO `user`(`id`,`name`,`pwd`) VALUES(1,'张三',123456); SELECT * FROM `user`;

2、idea中新建一个普通的maven项目

在这个项目中我们可以删除src目录,然后我们可以在这个项目中创建子模块的maven项目。父项目的pom.xml导入的依赖子模块也能使用,子模块有特殊需要的依赖再导,这样我们就节省了时间。

父项目的pom.xml导入的依赖:

         <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.49</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.13</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>                   

还需导入build这个标签(可以将写在dao层接口的实现接口配置文件mappper.xml这些资源打包时导出来。如果这些文件在resource中且和接口的路径一致则能直接打包出)

  <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
    </build>

3、父项目的目录下新建一个maven的子模块

子模块的resources目录下创建一个mybatis的核心配置文件,命名为mybatis-config.xml。配置文件中environments中可以配置多个环境,通过default中的参数值和每个环境中id的值相匹配。dataSource标签中配置数据库的驱动、url地址、用户名和密码。

<?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核心配置文件-->
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=Asia/Shanghai"/>
                <property name="username" value="数据库用户名"/>
                <property name="password" value="数据库密码"/>
            </dataSource>
        </environment>
    </environments>
</configuration>

4、创建一个工具类(拿到一个SqlSession对象)

创建一个工具类:MybatisUtil。工具类中首先静态加载一个sqlSessionFactory对象:将mybatis的核心配置文件变成一个流,SqlSessionFactoryBuilder中的build方法读取这个文件流,new出sqlSessionFactory对象。工具类中再写一个静态的方法拿到SqlSession,通过类中静态加载出来的sqlSessionFactory中的openSession方法获得。这样我们在new工具类MybatisUtil时就可以使用getSqlSession方法拿到一个SqlSession对象。

public class MybatisUtil {
    public static SqlSessionFactory sqlSessionFactory;
    static {
        try {
            //获取sqlSessionFactory对象
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession();
    }

}

5、编写一个实体类

写一个和数据库中的user表相对应的实体类,导入lombok依赖,使用注解完成get、set、有参无参等构造。

    <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.12</version>
        </dependency>
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private int id;
    private String name;
    private String pwd;

}

6、编写Dao层的接口和实现的配置文件

写一个UserMapper的接口,里面写方法。

public interface UserMapper {
    List<User> getUserList();
}

写实现接口的配置文件UserMapper.xml(原本这里是接口实现类UserMapperImpl)。mapper标签中的namespace属性用来绑定我们刚才的接口;mapper标签中可以添加增删改查等标签,这里是select标签,里面的id属性是绑定接口中的方法名,resultType属性是返回值的类型,这里返回值的类型是我们编写的实体类。

注意:这里绑定接口的命名空间、id、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">

<mapper namespace="com.along.dao.UserMapper">
    <select id="getUserList" resultType="com.along.pojo.User">
        select * from mybatis.user
    </select>
</mapper>

然后接口或配置文件在mybatis的核心配置文件中注册,不然会爆一个绑定错误。这里需要注意的是mapper有三种注册方式,class方式路径每个包之间用"."来间隔,resource方式路径每个包之间用"/"来间隔,用错符号会爆初始化异常的错误。

  <mappers>
        <mapper resource="com/along/dao/UserMapper.xml"/>
    </mappers>

    <mappers>
        <mapper class="com.along.dao.UserMapper"/>
    </mappers>

7、测试

写一个测试类看是否能联通数据库,看是否能完成增删改查操作。添加了junit的依赖,可以使用注解@Test完成对接口的测试,不需要用main方法进入,非常得便捷。

第一步、使用我们编写的工具类获取sqlSession对象。第二步、使用获得的sqlSession对象获得mapper对象,这个mapper对象就相当于接口实现类的实例化对象。

public class UserDaoTest {
    @Test
    public void test(){
        //第一步获得sqlSession对象
        SqlSession sqlSession = MybatisUtil.getSqlSession();
        //执行sql
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> userList = mapper.getUserList();
        for (User user : userList) {
            System.out.println(user);
        }
     //关闭sqlSession
sqlSession.close(); } }

成功了

可能遇到的问题

1.配置文件没有注册

2.绑定接口错误。

3.方法名不对

4.返回类型不对

5. Maven导出资源问题

environments
posted @ 2023-08-12 20:29  数星观月  阅读(13)  评论(0编辑  收藏  举报