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

mybatis 基础(一) xml配置

程序员文章站 2022-03-25 22:51:50
如果文章有误,请各位楼下评论,感谢各位积极修正! 一起学习,成为大佬! mybatis: 1.轻量级 2.高级映射(实体类与数据库表字段的映射) 这样就可以后续开发中去操作实体类而不需要去关注数据库,(但其实已经做了一遍实体类与数据库字段的对应关系) 3.mybatis中 dao层为接口.不需要写实 ......

如果文章有误,请各位楼下评论,感谢各位积极修正! 一起学习,成为大佬!

mybatis:

1.轻量级

2.高级映射(实体类与数据库表字段的映射) 这样就可以后续开发中去操作实体类而不需要去关注数据库,(但其实已经做了一遍实体类与数据库字段的对应关系)

3.mybatis中 dao层为接口.不需要写实现类,实现的方式交付给xml或注解

4.mybatis所需依赖的jar

    <dependency>
      <groupid>org.mybatis</groupid>
      <artifactid>mybatis</artifactid>
      <version>3.5.0</version>
    </dependency>

     <!-- mysql 连接数据库  java -->
    <dependency>
      <groupid>mysql</groupid>
      <artifactid>mysql-connector-java</artifactid>
      <version>5.1.15</version>
    </dependency>
  1. 注意:映射xml文件的路径需要与接口对应上

mybatis 基础(一) xml配置

第一章 记录xml方式

需要两个xml文件
主配置文件:mybatis-config.xml
映射文件:user.xml

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">

mybatis-config.xml

<configuration>
    <!--配置环境-->
    <environments default="mysql">
        <!--配置mysql的环境-->
        <environment id="mysql">
            <!--配置事务-->
            <transactionmanager type="jdbc"></transactionmanager>
            <!--配置连接池-->
            <datasource type="pooled">
                <property name="driver" value="com.mysql.jdbc.driver"></property>
                <property name="url" value="jdbc:mysql://localhost:3306/database"></property>
                <property name="username" value="root"></property>
                <property name="password" value="root"></property>
            </datasource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/mybatis/dao/user.xml"></mapper>
    </mappers>
</configuration>

user.xml

<!--映射路径-->
<mapper namespace="com.mybatis.dao.iusedao">
    <!--
        注意点:#{}里面的字段对应的是实体类中getter后面的字段开头字母小写.如getusername 对应的就是username
        resulttype:返回值类型
        parametertype:参数类型
        id:对应接口中的方法(对应映射路径中的方法)
    -->

    <!--
        resultmap  主要作用是让实体类与数据库表中字段名映射上
            如果实体类与数据库中字段名在不区分大小写的情况下相同的话,那就不需要配置resultmap,因为mysql数据库不区分大小写,所以可以
            直接映射上

            但是如果实体类与数据库中字段名不相同的话,我们可以由三个解决方案
            1. 直接修改数据库字段名,使之与实体类对应上
            2. 在程序中配置文件中对sql语句改造,起别名,使之与实体类映射上  (直接操作sql语句效率更高)
                如: select gender as usergender,age as userage from user;
            3. 写配置文件 resultmap,使之映射上,但是需要修改resulttype="com.mybatis.entry.user"  为 resultmap="usermap" (方便)

    -->
    <resultmap id="usermap" type="com.mybatis.entry.user">
        <!--首先配置主键对应-->
        <id column="uid" property="useruid"></id>
        <!--其他属性配置-->
        <result column="username" property="username"></result>
        <result column="gender" property="usergender"></result>
        <result column="age" property="userage"></result>
    </resultmap>
    <!--获得所有用户列表-->
    <!--<select id="getusers" resultmap="usermap">-->
    <select id="getusers" resulttype="com.mybatis.entry.user">
        select * from user
    </select>
    <!--添加一条信息-->
    <insert id="saveuser" parametertype="com.mybatis.entry.user">
        <!--配置插入操作后,获取插入数据的id
           keyproperty: 指定返回的id映射到bean中的哪个属性
           keycolumn: 插入数据以后,要返回的内容在数据表中对应的字段名称
           order  after :表示这个selectkey语句的执行是在insert语句之后
        -->
        <selectkey keyproperty="uid" keycolumn="uid" order="after" resulttype="int">
            select last_insert_id();
        </selectkey>
        insert into user(username,gender,age) values (#{username},#{gender},#{age})
    </insert>
    <!--删除一条信息-->
    <delete id="deleteuser" parametertype="java.lang.integer">
        delete from user where uid=#{uid}
    </delete>
    <!--更新一条信息-->
    <update id="updateuser" parametertype="com.mybatis.entry.user">
        update user set username=#{username},gender=#{gender},age=#{age} where uid=#{uid}
    </update>
    <!--
    模糊查询:模糊查询的时候可以使用一个字段作为占位符,然后再测试类或者被调用的时候加上百分号
    -->
    <!--<select id="getusers" resultmap="usermap">-->
    <select id="findbyname" parametertype="java.lang.string" resulttype="com.mybatis.entry.user">
        select * from user where username like #{name}
    </select>

    <!--查询总条数-->
    <select id="findtotal"  resulttype="int">
        select count(1) from user
    </select>


    <!--根据多个对象查询,需要将实体类以及其他属性再封装一层成为新的实体类-->
    <!--<select id="getusers" resultmap="usermap">-->
    <select id="findbyvo" resulttype="com.mybatis.entry.user" parametertype="com.mybatis.entry.vo">
        select * from user  where username=#{user.username} and gender=#{user.gender}
    </select>
</mapper>

接口

public interface iusedao
{
    /**
     * 查询所有用户
     * @return
     */
    public  list<user> getusers();

    /**
     * 添加用户
     * @return
     */
    public  boolean saveuser(user user);

    /**
     * 删除用户
     * @return
     */
    public void deleteuser(int uid);

    /**
     *修改用户
     */
    public void updateuser(user user);

    /**
     * 模糊查询
     * @param username
     * @return
     */
    public list<user> findbyname(string username);

    /**
     * 查询总记录条数
     * @return
     */
    public int findtotal();

    /**
     * 根据新封装的实体类去查询(多条件查询)
     * @param vo  将多个条件封装成一个实体类
     * @return
     */
    public list<user> findbyvo(vo vo);
}

测试类

public class mybatistest {
    private  inputstream inputstream=null;
    private sqlsession sqlsession=null;
    private iusedao userdao=null;
    private sqlsessionfactory sessionfactory=null;

    @before
    public void init() throws exception
    {
         inputstream=resources.getresourceasstream("mybatis-config.xml");
         sessionfactory=new sqlsessionfactorybuilder().build(inputstream);
         sqlsession=sessionfactory.opensession();
         userdao=sqlsession.getmapper(iusedao.class);
    }

    @after
    public void destroy() throws exception
    {
        sqlsession.commit();
        sqlsession.close();
        inputstream.close();
    }

    @test
    public void testfindall() throws exception {
        list<user> list=userdao.getusers();
        for (user user:list) {
            system.out.println(user);
        }
    }

   @test
    public void testsaveuser() throws  exception{
        user user=new user();
        user.setusername("xxx");
        user.setage(20);
        user.setgender("男");
        /*获取保存前的id*/
       system.out.println(user.getuid());
        userdao.saveuser(user);
        /*获取保存后的id*/
       system.out.println(user.getuid());
    }

    @test
   public void testdeleteuser() throws  exception
    {
        int uid=3;
        userdao.deleteuser(uid);
    }

    @test
    public void testupdateuser() throws  exception{
        user user=new user();
        user.setuid(5);
        user.setusername("test");
        user.setage(20);
        user.setgender("男");
        userdao.updateuser(user);
    }

    @test
    public void testfindbyname() throws  exception{
        list<user> users = userdao.findbyname("%x%");
        for (user user:users)
        {
            system.out.println(user);
        }
    }

    @test
    public void testfindtotal() throws  exception{
        int total = userdao.findtotal();
        system.out.println(total);
    }

    @test
    public void testfindbyvo() throws  exception{
        vo vo=new vo();
        user user=new user();
        user.setusername("xxx");
        user.setgender("男");
        vo.setuser(user);
        list<user> vos = userdao.findbyvo(vo);
        for (user user1:vos)
        {
            system.out.println(user1);
        }
    }
}