新手适用,创建一个mybatis工程(详细参数配置说明)

发布于:2023-01-22 ⋅ 阅读:(396) ⋅ 点赞:(0)

        首先我的开发环境如下:

        idea:2021、Java:9、maven:3.6.1 、mybatis:3.5.7

 有些版本的环境会出问题,我之前使用的是3.8的maven和Java17,结果因为版本太高一直报错,找了好几天。所以工欲善其事必先利其器,先把环境整合好是最好的,不然做到一半有报错是真的难受。

项目结构图如下:

 一、首先引入对应的maven依赖

    <dependencies>
<!--        mybatis核心-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.7</version>
        </dependency>
<!--        junit测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
        </dependency>
        <!--        mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
        </dependency>
        <!-- log4j日志 -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
    </dependencies>

 二、创建相关的实体类(User.java)、建立对应的数据源(ssm数据库下建立一个t_user表)

public class User {
    private Integer id;
    private String username;
    private String password;
    private Integer age;
    private String gender;
    private String email; 
//其他方法自己添加
}

 三、创建Mybatis的核心配置文件(mybatis-config.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>
    <!--
    mybatis的核心配置文件中的标签必须按照指定的顺序配置:
    properties?,settings?,typeAliases?,typeHandlers?,
    objectFactory?,objectWrapperFactory?,reflectorFactory?,
    plugins?,environments?,databaseIdProvider?,mappers?-->
<!--    引入properties文件,此后就可以在当前文件中使用${key}的方式访问value-->
    <properties resource="jdbc.properties"/>

    <typeAliases>
        <!--typeAlias
                type:设置需要起别名的类型
                alias:设置某个类型的别名(别名在UserMapper.xml中的resultType|resultMap中使用,方便引用)
        -->
<!--        <typeAlias type="com.atguigu.mybatis.pojo.User" alias="abc"/>-->
        <!--如果不设置alias别名,那么默认拥有一个别名,即类名且不区分大小写-->
        <typeAlias type="com.atguigu.mybatis.pojo.User"/>
        <!--通过包设置别名,指定包下所有的类型将全部拥有默认的别名,即类名且不区分大小写-->
        <package name="com.atguigu.mybatis.pojo"/>
    </typeAliases>

    <!--environments:配置连接数据库的环境
            属性:
            default:设置默认使用的环境id-->
    <environments default="development">
        <!--
            environment:设置一个具体的连接数据库的环境
            属性:
            id:设置环境的唯一标识,不能重复-->
        <environment id="development">
            <transactionManager type="JDBC"/>
            <!--
                dataSource:设置数据源
                属性:
                type:设置数据源的类型
                type="POOLED|UNPOOLED|JNDI"
                    POOLED:使用数据库连接池
                    UNPOOLED:不使用数据库连接池
                    JNDI:使用上下文的数据源
            -->
            <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>
<!--可以配置不同环境下的数据源-->
        <environment id="test">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/ssm"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <!--引入映射文件-->
    <mappers>
        <!--    单独引入某个mapper.xml文件
            <mapper resource="mappers/UserMapper.xml"/>-->
        <!--
            以包的方式引入映射文件,但是必须满足两个条件:
                1、mapper接口和映射文件所在的包必须一致
                2、mapper接口的名字和映射文件的名字必须一致
        -->
                <package name="com.atguigu.mybatis.mapper"/>
    </mappers>
</configuration>

四、创建mapper接口(UserMapper.java)

public interface UserMapper {
    /*添加用户信息*/
    int insertUser();
    /*删除单条用户信息*/
    int deleteUser();
    /*修改单条数据*/
    void updateUser();
    /*查询一个实体类对象*/
    User getUserById();
    /*查询list集合*/
    List<User> getUserList();
}

五、创建MyBatis的映射文件

<?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.atguigu.mybatis.mapper.UserMapper">
    <!--
        mapper接口和映射文件要保证两个一致:
        1、mapper接口的全类名和映射方法的namespace一致
        2、mapper接口中的方法的方法名要和映射文件中的sql的id保持一致
    -->
    <!--添加;int insertUser();-->
    <insert id="insertUser">
        insert into t_user values(null,'admin','123456',23,'男','12345@qq.com')
    </insert>
    <!--删除:int deleteUser();-->
    <delete id="deleteUser">
        delete from t_user where id = 2
    </delete>
    <!--修改:void updateUser();-->
    <update id="updateUser">
        update t_user set username = 'root', password = '123' where id = 1
    </update>
    <!--
        resultType:设置结果类型,即查询的数据要转换的Java类型
        resultMap:自定义映射,处理多对一或者一对多的映射关系
    -->
    <!--查询单个:User getUserById();-->
    <select id="getUserById" resultType="com.atguigu.mybatis.pojo.User">
        select * from t_user where id = 1
    </select>
    <!--查询list集合List<User> getUserList();-->
<!--<select id="getUserList" resultType="abc">      使用别名-->
    <select id="getUserList" resultType="user">
        select * from t_user
    </select>

</mapper>

六、因为mybatis-config.xml中引入properties文件,所以需要建立一个jdbc.properties

#前面的jdbc相当于一个包名限定
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm
#如果MySQL使用的是8.0以上的需要配置时区
#jdbc.driver=com.mysql.cj.jdbc.Driver
#jdbc.url=jdbc:mysql://localhost:3306/ssm?serverTimezione=UTC
jdbc.username=root
jdbc.password=123456
jdbc.maxTotal=30
jdbc.minPoolSize=10
jdbc.initialSize=15

七、添加log4j方便查看(log4j.xml)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
        <param name="Encoding" value="UTF-8" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS}%m (%F:%L) \n" />
        </layout>
    </appender>
    <logger name="java.sql">
        <level value="debug" />
    </logger>
    <logger name="org.apache.ibatis">
        <level value="info" />
    </logger>
    <root>
        <level value="debug" />
        <appender-ref ref="STDOUT" />
    </root>
</log4j:configuration>

八、因为测试类MyBatisTest中经常要获取SqlSession对象,所以可以单独封装成一个方法(SqlSessionUtil.java)

public class SqlSessionUtil {
  public static SqlSession getSqlSession(){
      SqlSession sqlSession = null;
      try {
          //获取核心配置文件
          InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
          //获取SqlSessionFactoryBuilder对象
          SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
          //获取SqlSessionFactory对象
          SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
          //获取sql的会话对象SqlSessions(true):自动提交事务,是Mybatis提供的操作数据库的对象
          sqlSession = sqlSessionFactory.openSession(true);
      } catch (IOException e) {
          e.printStackTrace();
      }
        return sqlSession;
  }
}

九、测试类MyBatisTest(MyBatisTest.java)

public class MyBatisTest {
//    添加用户
    @Test
    public void testInsert() throws IOException {
        //获取核心配置文件
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        //获取SqlSessionFactoryBuilder对象
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        //获取SqlSessionFactory对象
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
        /*//获取sql的会话对象SqlSessions(不会自动提交事务,所以要自己启用commit()方法),是Mybatis提供的操作数据库的对象
        SqlSession sqlSession = sqlSessionFactory.openSession();*/
        //获取sql的会话对象SqlSessions(true):自动提交事务,是Mybatis提供的操作数据库的对象
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        //获取UserMapper的代理实现类对象
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        //调用mapper接口中的方法,实现添加用户信息的功能
        int result = mapper.insertUser();
//        System.out.println(result);
       /*//启用事务提交(不能自动提交事务时候,手动打开提交事务)
        sqlSession.commit();*/
        //关闭资源
        sqlSession.close();
    }

//    删除用户
    @Test
    public void deleteUser(){
        SqlSession sqlSession = SqlSessionUtil.getSqlSession(); //调用自己创建的获取的sqlsession的方法获取sqlSession
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);//通过getMapper方法获得要操作的Mapper方法
        mapper.deleteUser();    //调用mapper中的方法
        sqlSession.close(); //关闭资源
    }

//    修改用户
    @Test
    public void testUpdateUser(){
        SqlSession sqlSession = SqlSessionUtil.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        mapper.updateUser();
        sqlSession.close();
    }
//    查询一个实体类对象
    @Test
    public void getUserById(){
        SqlSession sqlSession = SqlSessionUtil.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        User user = mapper.getUserById();
        System.out.println(user);
        sqlSession.close();
    }
    //    查询一个实体类对象
    @Test
    public void getUserList(){
        SqlSession sqlSession = SqlSessionUtil.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> list = mapper.getUserList();
        list.forEach(System.out::println);//使用forEach遍历
        sqlSession.close();
    }
}

项目测试结果如图

 

本文含有隐藏内容,请 开通VIP 后查看