欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Mybatis实现对数据库的增删改查、Mybatis配置文件详解

程序员文章站 2022-05-06 20:57:34
...

一、编写接口

package org.westos.dao;

import org.westos.pojo.User;

import javax.jws.soap.SOAPBinding;
import java.util.List;

public interface UserMapper {
    //添加一个用户
    int addUser(User user);

    //根据id查找用户
    User selectUser(int id);

    //根据id删除一个用户
    int deleteUser(int id);

    //修改用户信息
    int update(User user);
}

二、编写接口对应的mapper文件

<?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对应Mapper接口的类-->
<mapper namespace="org.westos.dao.UserMapper">
    <!--select标签的id对应映射接口的方法名字  resultType:返回结果的类型  中间就编写sql语句-->

    <!--添加一个用户-->
    <insert id="addUser" parameterType="org.westos.pojo.User">
        insert into user (id,name,pwd) values (#{id},#{name},#{pwd})
    </insert>

    <!--根据id查找用户-->
    <select id="selectUser" resultType="org.westos.pojo.User">
        select * from user where id=#{id}
    </select>

    <!--删除一个用户-->
    <delete id="deleteUser">
        delete from user where id = #{id}
    </delete>

    <!--更新用户信息-->
    <update id="update" parameterType="org.westos.pojo.User">
        update user set name = #{name},pwd = #{pwd} where id=#{id}
    </update>

</mapper>

三、测试类

package org.westos.dao;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.Test;
import org.westos.pojo.User;
import org.westos.utils.MybatisUtils;

import java.sql.ParameterMetaData;
import java.util.Date;

public class UserMapperTest {
    @Test
    public void testAddUser(){
        User user = new User(5, "元芳", "11111");
        //1.拿到sqlSessionFactory对象
        SqlSessionFactory sqlSessionFactory = MybatisUtils.getSqlSessionFactory();
        //2.通过sqlSessionFactory对象openSession()创建一个sqlSession。
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //3.通过sqlSession获得mapper对象 , 参数为映射文件对应的接口类的class对象
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        mapper.addUser(user);
        sqlSession.commit();
        sqlSession.close();

    }

    @Test
    public void testSelectUserById(){
        SqlSessionFactory sqlSessionFactory = MybatisUtils.getSqlSessionFactory();
        SqlSession sqlSession = sqlSessionFactory.openSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        User user = mapper.selectUser(2);
        System.out.println(user.toString());
    }

    @Test
    public void testDeleteUser(){
        SqlSessionFactory sqlSessionFactory = MybatisUtils.getSqlSessionFactory();
        SqlSession sqlSession = sqlSessionFactory.openSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        mapper.deleteUser(4);
        sqlSession.commit();
        sqlSession.close();
    }

    @Test
    public void testUpdateUser(){
        User user = new User(1, "小学生", "123456");
        SqlSessionFactory sqlSessionFactory = MybatisUtils.getSqlSessionFactory();
        SqlSession sqlSession = sqlSessionFactory.openSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        mapper.update(user);
        sqlSession.commit();
        sqlSession.close();
    }
}

四、注意

  1. 增,改,删需要提交事务!
  2. 如果出现乱码,先在sql中进行测试,若sql没问题,就检查配置文件
  3. 在编写接口的映射时,若参数(parameterType)或返回值(resultType)是基本数据类型则可以省略,引用数据类型必须指定包名+类名

五、配置文件详解

<?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   配置文件
    settings     mybatis设置
    typeAliases   为Java类起别名
    typeHandlers  类处理器
    objectFactory  对象工厂 
    plugins   插件
    environments  环境
	transactionManager  事务管理
	dataSource : 数据源
	mappers 映射器

六、配置文件详解——properties

在resources目录下创建database.properties

driver = com.mysql.jdbc.Driver
url = jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8'
username = root
password = 123456

在mybatis核心配置文件中引入properties配置文件,并用${}表达式引入其中的值

<configuration>
    <!--配置文件修改-->
    <properties resource="database.properties"/>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <mapper resource="org/westos/dao/userMapper.xml"/>
    </mappers>
</configuration>

七、配置文件详解——优化别名(typeAliases)

在配置文件中为pojo中的实体类设置别名

typeAliases的alias属性为别名,type属性为包名+类名

<!--配置别名-->
<typeAliases>
    <typeAlias type="org.westos.pojo.User" alias="User"/>
    <package name="org.westos.pojo"/>
</typeAliases>

也可指定一个包名,MyBatis 会在包名下面搜索需要的 Java Bean

<package name="org.westos.pojo"/>

配置完毕可以在接口的映射中使用别名

    <!--添加一个用户-->
    <insert id="addUser" parameterType="User">
        insert into user (id,name,pwd) values (#{id},#{name},#{pwd})
    </insert>

八、配置文件详解——环境配置(environment)

MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中, 现实情况下有多种理由需要这么做。例如,开发、测试和生产环境需要有不同的配置;或者想在具有相同 Schema 的多个生产数据库中 使用相同的 SQL 映射。有许多类似的使用场景。

不过要记住:尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境。

所以,如果你想连接两个数据库,就需要创建两个 SqlSessionFactory 实例,每个数据库对应一个

<environments default="development">
    <environment id="development">
        <transactionManager type="JDBC"/>
        <dataSource type="POOLED">
            <property name="driver" value="${driver}"/>
            <property name="url" value="${url}"/>
            <property name="username" value="${username}"/>
            <property name="password" value="${password}"/>
        </dataSource>
    </environment>
</environments>

九、配置文件详解——映射器

  1. resource 【推荐】

    <!-- 使用相对于类路径的资源引用 -->
    <mappers>
      <mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
      <mapper resource="org/mybatis/builder/BlogMapper.xml"/>
      <mapper resource="org/mybatis/builder/PostMapper.xml"/>
    </mappers>
    
  2. url

    <!-- 使用完全限定资源定位符(URL) -->
    <mappers>
      <mapper url="file:///var/mappers/AuthorMapper.xml"/>
      <mapper url="file:///var/mappers/BlogMapper.xml"/>
      <mapper url="file:///var/mappers/PostMapper.xml"/>
    </mappers>
    
  3. class

    <!-- 使用映射器接口实现类的完全限定类名 -->
    <mappers>
      <mapper class="org.mybatis.builder.AuthorMapper"/>
      <mapper class="org.mybatis.builder.BlogMapper"/>
      <mapper class="org.mybatis.builder.PostMapper"/>
    </mappers>
    
  4. package

    <!-- 将包内的映射器接口实现全部注册为映射器 -->
    <mappers>
      <package name="org.mybatis.builder"/>
    </mappers>