基于Mybatis的增删改查

基于Mybatis的增删改查

1、 依赖包: mybatis-3.4.5.jar,jdbc-connector.jar,
2、 项目结构
这里写图片描述

3、 例子文件:

// com.pojo.User.java
package com.pojo;

public class User {
    private int id;
    private String name;
    private String address;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public User() {
    }

    public User(String name, String address) {
        this.name = name;
        this.address = address;
    }
}

// com.dao.UserDao.java
package com.dao;

import com.pojo.User;

public interface UserDao {
    public void addUser(User user);

    public void deleteUser(int userId);

    public void updateUser(User user);

    public User selectUserById(int userId);
    // 通过注解的方式,不需要配置mapper
    // @select("select * from user where id=#{id}")
    // public User selectUser(int id);
}

// com/dao/UserDaoMapper.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.dao.UserDao">
    <resultMap id="fuck" type="com.m.Fuck">
        // 将类Fuck中的字段一一映射出来
        <id column="fuckid" jdbcType="INTEGER" property="fuckid" />
        <result column="belong" jdbcType="VARCHAR" property="belong" />
    </resultMap>

    // 表名 sql
    <sql id="info1">table1</sql>
    <sql id="info2">table2</sql>

    // 序列 sql
    <sql id="id_seq">seq_fuck_fuckid.nextval</sql>

    // 表中的字段sql
    <sql id="table1_columns">tableid, tablename, remark</sql>

/************************* select **********************************/
    <select id="selectUserById" parameterType="int" resultType="User">
        select 
        <include  refid="table1_columns" />
         from 
        <include refid="table1" />
        where user.id=#{id, jdbcType=INTEGER}
        /*
        <if test="id != -1">
            and fuckid=#{fuckid, jdbcType=INTEGER}
        </if>
        */
    </select>
/************************* insert **********************************/
    <insert id="addUser" parameterType="User" useGeneratedKeys="true" keyProperty="id">
        insert into user (name, address)
        values(#{name}, #{address})
    </insert>

    <insert id="inertTable" parameterType="com.m.Fuck">
        <selectKey keyProperty="fuckid" resultType="int" order="BEFORE">
            select <include refid="id_seq" /> from dual
        </selectKey>

        // 多表插入,插入多条记录
        insert all 
        <foreach collection="tableInfos" item="tableInfo" index="index">
            into <include refid="table1" /> values 
            (#{tableInfo.tableId, jdbcType=INTEGER},
            #{fuckid, jdbcType=INTEGER}, // 上面的序列
            #{tableInfo.tablename, jdbcType=VARCHAR})
        </foreach>
        into <include refid="table2" /> values 
        (#{tableInfo.tableId, jdbcType=INTEGER},
        #{fuckid, jdbcType=INTEGER},
        #{tableInfo.tablename, jdbcType=VARCHAR})
    </insert>
/************************* update **********************************/   
    <update id="updateUser" parameterType="User">
        update user set name=#{name}, address=#{address}
        where id=#{id}
    </update>
/************************* delete**********************************/    
    // 删除单条  返回结果为int类型
    <delete id="deleteUser" parameterType="int">
        delete from user where id=#{id}
    </delete>
    // 多表删除 没有返回结果
    <delete id="deleteAll" parameterType="int">
        begin
        delete from user where id=#{id};
        delete from user_2 where id=#{id};
        end;
    </delete>
</mapper>

// mybatis/mysql-jdbc.properties
driver=com.mysql.jdbc.Driver
user=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf8
username=root
password=123456
// 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>
    <typeAliases>
        <typeAlias alias="User" type="com.pojo.User"/>
    </typeAliases>

    <properties resource="mybatis/mysql-jdbc.properties"></properties>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <!-- <property name="driver" value="com.mysql.jdbc.Driver"/> -->
                <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="com/dao/UserDaoMapper.xml"/>
        // 通过注解也需要配置mapper
        // <mapper class="com.dao.UserDao"/>
    </mappers>
</configuration>

// com.junit.UserDaoTest.java
package com.junit;

import java.io.Reader;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.BeforeClass;
import org.junit.Test;

import com.dao.UserDao;
import com.pojo.User;

public class UserDaoTest {

    static SqlSession session;
    @BeforeClass
    public static void setUpBeforeClass() throws Exception {
        Reader reader = Resources.getResourceAsReader("mybatis/mybatis-config.xml");
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);
        session = factory.openSession();
        reader.close();
    }

    @Test
    public void addUser() {
        User user = new User();
        user.setName("张三");
        user.setAddress("江苏省南京市");

        UserDao dao = session.getMapper(UserDao.class); // UserDao的实现类由mybatis自己内部生成
        dao.addUser(user);
        session.commit();
        session.close();
    }
    @Test
    public void deleteUser() {
        UserDao dao = session.getMapper(UserDao.class);
        dao.deleteUser(1);
        session.commit();
        session.close();
    }
    @Test
    public void updateUser() {
        User user = new User("张三2", "江苏省南京市2");
        UserDao dao = session.getMapper(UserDao.class);
        dao.updateUser(user);
        session.commit();
        session.close();
    }
    @Test
    public User selectUserById() {
        UserDao dao = session.getMapper(UserDao.class);
        User user = dao.selectUserById(1);
        session.close();
        return user;
    }
}
// 表user
user 表结构
id int auto_increase
name char(4)
address char(10)

4、 在插入中文字符的时候,出现数据库乱码
参考博客 mybatis操作mysql乱码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值