properties解耦数据库参数和SQL参数的传递

在往常连接数据库中,我使用工具类封装数据库的连接工具,在db.properties中配置数据库的相关参数,在工具类中用properties流来读取配置,那么在MyBatis中是否有相同的方法来解耦xml中的配置信息呢

properties标签

1 功能

用于加载外部的 properties 文件

2 使用方式

获取 properties 文件中数据时, 要通过${}的方式获取.
db.properties:

driver=oracle.jdbc.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:orcl
username=servlet
password=servlet

applicationContext-dao.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>
    <properties resource="db.properties"></properties>
    <environments default="development">   <!--默认使用的环境-->
        <environment id="development">
            <transactionManager type="JDBC"/>  <!--使用事务管理沿用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>
    <!--扫描mybatis的sql语句所在的文件-->
    <mappers>
        <mapper resource="com/batis/mapper/UserMapper.xml"></mapper>
    </mappers>
</configuration>

值得一提的是,在获取 properties 文件中数据时, 要通过EL表达式的方式获取.

t_user表的数据库设计结构:

create table t_user(
       tid number primary key,
       uname varchar2(20),
       pwd 
);
alter table t_user add sex number check (sex in('1','0'))

通过接口绑定解决多参数的传递(开发中推荐使用)

在mapper目录下创建UserMapper接口,使用动态代理来实现参数传递
UserMapper:

package com.batis.mapper;

import com.batis.pojo.User;

public interface UserMapper {
    public User selByName(String name);
    public User selByNP(String name,String pwd);
}

在UserMapper.xml中用namespace指向UserMapper接口,select的id要和接口中定义的方法名称一致
UserMapper.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.batis.mapper.UserMapper"> <!--这是名称空间的值写当前配置文件所在的包的包名-->
    <select id="selOne" resultType="com.batis.pojo.User">
        select * from t_user where uname = '李四'
    </select>
    <select id="selAll" resultType="com.batis.pojo.User"><!--返回值是集合,则返回集合的泛型即可-->
        select * from t_user
    </select>
    <select id="selByName" resultType="User">
        select * from t_user where uname = #{arg0}
    </select>
    <select id="selByNP" resultType="User">
        select * from t_user where uname = #{arg0} and pwd = #{arg1}
    </select>
</mapper>
<select id="selByName" resultType="User">
    select * from t_user where uname = #{arg0}
</select>

在这个代码中,返回值类型,我在applicatContext-dao.xml中对com.batis.pojo.User做了重新命名

测试类
Test02():

package com.batis.test;

import com.batis.mapper.UserMapper;
import com.batis.pojo.User;
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.Test;

import java.io.IOException;
import java.io.Reader;

public class Test02 {
    private UserMapper mapper;
    private SqlSession Session
    public Test02() throws IOException {
        Reader in = Resources.getResourceAsReader("applicationContext-dao.xml");
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
        Session = factory.openSession();
        mapper = Session.getMapper(UserMapper.class);//使用反射,参数为UserMapper的class对象
        //通过反射创建接口的动态代理
    }
    @Test
    public void selByName(){
        User user = mapper.selByName("李四");
        System.out.println(user);
    }
    @Test
    public void selByNP(){
        User user = mapper.selByNP("李四","123456");
        System.out.println(user);
    }
}

结果:

D:\Java\jdk-14.0.1_windows-x64_bin\jdk-14.0.1\bin\java.exe -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:D:\JAVA\IntelliJ IDEA 2019.3.2\lib\idea_rt.jar=56629:D:\JAVA\IntelliJ IDEA 2019.3.2\bin" -Dfile.encoding=UTF-8 -classpath "D:\JAVA\IntelliJ IDEA 2019.3.2\lib\idea_rt.jar;D:\JAVA\IntelliJ IDEA 2019.3.2\plugins\junit\lib\junit5-rt.jar;D:\JAVA\IntelliJ IDEA 2019.3.2\plugins\junit\lib\junit-rt.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\out\production\firstmybatis;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\asm-3.3.1.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\cglib-2.2.2.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\commons-logging-1.1.1.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\javassist-3.17.1-GA.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\junit-4.9.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\log4j-1.2.17.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\log4j-api-2.0-rc1.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\log4j-core-2.0-rc1.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\mybatis-3.5.3.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\mysql-connector-java-5.1.48.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\ojdbc6.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\slf4j-api-1.7.5.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\slf4j-log4j12-1.7.5.jar" com.intellij.rt.junit.JUnitStarter -ideVersion5 -junit4 com.batis.test.Test02,selByNP
- Logging initialized using 'class org.apache.ibatis.logging.slf4j.Slf4jImpl' adapter. org.apache.ibatis.logging.LogFactory org.apache.ibatis.logging.LogFactory.setImplementation(LogFactory.java:105)  2020-07-18 16:00:17
	- PooledDataSource forcefully closed/removed all connections. org.apache.ibatis.datasource.pooled.PooledDataSource org.apache.ibatis.datasource.pooled.PooledDataSource.forceCloseAll(PooledDataSource.java:353)  2020-07-18 16:00:17
	- PooledDataSource forcefully closed/removed all connections. org.apache.ibatis.datasource.pooled.PooledDataSource org.apache.ibatis.datasource.pooled.PooledDataSource.forceCloseAll(PooledDataSource.java:353)  2020-07-18 16:00:17
	- PooledDataSource forcefully closed/removed all connections. org.apache.ibatis.datasource.pooled.PooledDataSource org.apache.ibatis.datasource.pooled.PooledDataSource.forceCloseAll(PooledDataSource.java:353)  2020-07-18 16:00:17
	- PooledDataSource forcefully closed/removed all connections. org.apache.ibatis.datasource.pooled.PooledDataSource org.apache.ibatis.datasource.pooled.PooledDataSource.forceCloseAll(PooledDataSource.java:353)  2020-07-18 16:00:17
	- Opening JDBC Connection org.apache.ibatis.transaction.jdbc.JdbcTransaction org.apache.ibatis.transaction.jdbc.JdbcTransaction.openConnection(JdbcTransaction.java:136)  2020-07-18 16:00:18
	- Created connection 1846501247. org.apache.ibatis.datasource.pooled.PooledDataSource org.apache.ibatis.datasource.pooled.PooledDataSource.popConnection(PooledDataSource.java:424)  2020-07-18 16:00:18
	- Setting autocommit to false on JDBC Connection [oracle.jdbc.driver.T4CConnection@6e0f5f7f] org.apache.ibatis.transaction.jdbc.JdbcTransaction org.apache.ibatis.transaction.jdbc.JdbcTransaction.setDesiredAutoCommit(JdbcTransaction.java:100)  2020-07-18 16:00:18
	- ==>  Preparing: select * from t_user where uname = ? and pwd = ?  com.batis.mapper.UserMapper.selByNP org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:143)  2020-07-18 16:00:18
	- ==> Parameters: 李四(String), 123456(String) com.batis.mapper.UserMapper.selByNP org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:143)  2020-07-18 16:00:18
	- <==      Total: 1 com.batis.mapper.UserMapper.selByNP org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:143)  2020-07-18 16:00:18
	User{tid=12, uname='李四', pwd='123456', sex=1}

Process finished with exit code 0

参数中使用@Param 注解设定参数名用于在 SQL 语句中使用.@Param后面是sql中使用的别名映射文件中提供对应的标签. 此时, SQL 语句中获取方有两种, 通过#{参数名称}或#{param+数字}的方式.第一个参数是param1,第二个是param2

在传递参数时传递对象

多个参数传递时, 由于 sqlSession 中提供的查询方法只允许传入一个参数, 因此可以对多个参数进行封装. 可以使用对象或 Map 集合.
UserMapper.xml:

    <select id="selByUser" resultType="User">
        select * from t_user where uname = #{uname} and pwd = #{pwd}
    </select>

UserMapper:

public User selByUser(User user);

Test02:

    @Test
    public void selByUser(){
        User u = new User();
        u.setUname("李四");
        u.setPwd("123456");
        User user = mapper.selByUser(u);
        System.out.println(user);
    }

结果:

D:\Java\jdk-14.0.1_windows-x64_bin\jdk-14.0.1\bin\java.exe -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:D:\JAVA\IntelliJ IDEA 2019.3.2\lib\idea_rt.jar=56755:D:\JAVA\IntelliJ IDEA 2019.3.2\bin" -Dfile.encoding=UTF-8 -classpath "D:\JAVA\IntelliJ IDEA 2019.3.2\lib\idea_rt.jar;D:\JAVA\IntelliJ IDEA 2019.3.2\plugins\junit\lib\junit5-rt.jar;D:\JAVA\IntelliJ IDEA 2019.3.2\plugins\junit\lib\junit-rt.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\out\production\firstmybatis;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\asm-3.3.1.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\cglib-2.2.2.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\commons-logging-1.1.1.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\javassist-3.17.1-GA.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\junit-4.9.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\log4j-1.2.17.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\log4j-api-2.0-rc1.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\log4j-core-2.0-rc1.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\mybatis-3.5.3.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\mysql-connector-java-5.1.48.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\ojdbc6.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\slf4j-api-1.7.5.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\slf4j-log4j12-1.7.5.jar" com.intellij.rt.junit.JUnitStarter -ideVersion5 -junit4 com.batis.test.Test02,selByNP
- Logging initialized using 'class org.apache.ibatis.logging.slf4j.Slf4jImpl' adapter. org.apache.ibatis.logging.LogFactory org.apache.ibatis.logging.LogFactory.setImplementation(LogFactory.java:105)  2020-07-18 16:13:19
	- PooledDataSource forcefully closed/removed all connections. org.apache.ibatis.datasource.pooled.PooledDataSource org.apache.ibatis.datasource.pooled.PooledDataSource.forceCloseAll(PooledDataSource.java:353)  2020-07-18 16:13:19
	- PooledDataSource forcefully closed/removed all connections. org.apache.ibatis.datasource.pooled.PooledDataSource org.apache.ibatis.datasource.pooled.PooledDataSource.forceCloseAll(PooledDataSource.java:353)  2020-07-18 16:13:19
	- PooledDataSource forcefully closed/removed all connections. org.apache.ibatis.datasource.pooled.PooledDataSource org.apache.ibatis.datasource.pooled.PooledDataSource.forceCloseAll(PooledDataSource.java:353)  2020-07-18 16:13:19
	- PooledDataSource forcefully closed/removed all connections. org.apache.ibatis.datasource.pooled.PooledDataSource org.apache.ibatis.datasource.pooled.PooledDataSource.forceCloseAll(PooledDataSource.java:353)  2020-07-18 16:13:19
	- Opening JDBC Connection org.apache.ibatis.transaction.jdbc.JdbcTransaction org.apache.ibatis.transaction.jdbc.JdbcTransaction.openConnection(JdbcTransaction.java:136)  2020-07-18 16:13:19
	- Created connection 671471369. org.apache.ibatis.datasource.pooled.PooledDataSource org.apache.ibatis.datasource.pooled.PooledDataSource.popConnection(PooledDataSource.java:424)  2020-07-18 16:13:19
	- Setting autocommit to false on JDBC Connection [oracle.jdbc.driver.T4CConnection@2805d709] org.apache.ibatis.transaction.jdbc.JdbcTransaction org.apache.ibatis.transaction.jdbc.JdbcTransaction.setDesiredAutoCommit(JdbcTransaction.java:100)  2020-07-18 16:13:19
	- ==>  Preparing: select * from t_user where uname = ? and pwd = ?  com.batis.mapper.UserMapper.selByNP org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:143)  2020-07-18 16:13:19
	- ==> Parameters: 李四(String), 123456(String) com.batis.mapper.UserMapper.selByNP org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:143)  2020-07-18 16:13:19
	- <==      Total: 1 com.batis.mapper.UserMapper.selByNP org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:143)  2020-07-18 16:13:19
	User{tid=12, uname='李四', pwd='123456', sex=1}

Process finished with exit code 0

可以看到,在传递参数时可以传入一个对象,而在xml中获取对象属性时则直接使用#{属性名}来获取,这种方法可以做到,传入一个对象,在获取的时候调用不同的值,传入的参数不限制个数,在开发者中有较大的方便性,较为常用。

事务(Transaction)

a) 事务是数据库操作的最小单元, 有 ACID(原子性、一致性、合理性、持久性) 的特性. 应该保证一个事务的的 SQL 语句要么同时成功, 要么都不成功.

b) MyBatis 中配置了事务管理器, type 属性设置为 JDBC.表示 MyBatis 采用和原生 JDBC 相同的事务管理机制.

c) 在 MyBatis 执行的开始时, 将自动提交功能关闭了. 所以,在执行 DML 操作时, 需要手动提交事务.

在前面我们用MyBatis对数据库的查询操作有所了解,接下来对增删改操作逐一进行练习和操作

Insert(插入操作)

和查询操作一样,先在UserMapper.xml中加入insert标签
UserMapper.xml:

    <insert id="insert">
        insert into t_user values(null,#{uname},#{pwd},#{sex})
    </insert>

值得一提的是,我在tid插入的为空值,是因为我在数据库中写了触发器,当数据插入时触发器自动将tid替换为自定义自增序列的nextval

触发器:

--写触发器,实现插入tid自增
create sequence user_tid_seq;
select user_tid_seq.nextval from dual;
create or replace trigger tri1
before
insert
on t_user
for each row--行级触发器,不写就是表级触发器
declare
begin
  select user_tid_seq.nextval into :new.tid from dual;
end;

UserMapper接口:

public int insert(User user);

Test02:

    @Test
    public void insert(){
        User u = new User();
        u.setUname("小白");
        u.setPwd("123");
        u.setSex(1);
        int n = mapper.insert(u);
        if(n==1){
            System.out.println("插入成功");
            session.commit();
        }else{
            System.out.println("插入失败");
            session.rollback();
        }
    }

结果:

D:\Java\jdk-14.0.1_windows-x64_bin\jdk-14.0.1\bin\java.exe -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:D:\JAVA\IntelliJ IDEA 2019.3.2\lib\idea_rt.jar=56878:D:\JAVA\IntelliJ IDEA 2019.3.2\bin" -Dfile.encoding=UTF-8 -classpath "D:\JAVA\IntelliJ IDEA 2019.3.2\lib\idea_rt.jar;D:\JAVA\IntelliJ IDEA 2019.3.2\plugins\junit\lib\junit5-rt.jar;D:\JAVA\IntelliJ IDEA 2019.3.2\plugins\junit\lib\junit-rt.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\out\production\firstmybatis;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\asm-3.3.1.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\cglib-2.2.2.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\commons-logging-1.1.1.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\javassist-3.17.1-GA.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\junit-4.9.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\log4j-1.2.17.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\log4j-api-2.0-rc1.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\log4j-core-2.0-rc1.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\mybatis-3.5.3.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\mysql-connector-java-5.1.48.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\ojdbc6.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\slf4j-api-1.7.5.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\slf4j-log4j12-1.7.5.jar" com.intellij.rt.junit.JUnitStarter -ideVersion5 -junit4 com.batis.test.Test02,insert
- Logging initialized using 'class org.apache.ibatis.logging.slf4j.Slf4jImpl' adapter. org.apache.ibatis.logging.LogFactory org.apache.ibatis.logging.LogFactory.setImplementation(LogFactory.java:105)  2020-07-18 16:25:56
	- PooledDataSource forcefully closed/removed all connections. org.apache.ibatis.datasource.pooled.PooledDataSource org.apache.ibatis.datasource.pooled.PooledDataSource.forceCloseAll(PooledDataSource.java:353)  2020-07-18 16:25:56
	- PooledDataSource forcefully closed/removed all connections. org.apache.ibatis.datasource.pooled.PooledDataSource org.apache.ibatis.datasource.pooled.PooledDataSource.forceCloseAll(PooledDataSource.java:353)  2020-07-18 16:25:56
	- PooledDataSource forcefully closed/removed all connections. org.apache.ibatis.datasource.pooled.PooledDataSource org.apache.ibatis.datasource.pooled.PooledDataSource.forceCloseAll(PooledDataSource.java:353)  2020-07-18 16:25:56
	- PooledDataSource forcefully closed/removed all connections. org.apache.ibatis.datasource.pooled.PooledDataSource org.apache.ibatis.datasource.pooled.PooledDataSource.forceCloseAll(PooledDataSource.java:353)  2020-07-18 16:25:56
	- Opening JDBC Connection org.apache.ibatis.transaction.jdbc.JdbcTransaction org.apache.ibatis.transaction.jdbc.JdbcTransaction.openConnection(JdbcTransaction.java:136)  2020-07-18 16:25:56
	- Created connection 1560940633. org.apache.ibatis.datasource.pooled.PooledDataSource org.apache.ibatis.datasource.pooled.PooledDataSource.popConnection(PooledDataSource.java:424)  2020-07-18 16:25:56
	- Setting autocommit to false on JDBC Connection [oracle.jdbc.driver.T4CConnection@5d0a1059] org.apache.ibatis.transaction.jdbc.JdbcTransaction org.apache.ibatis.transaction.jdbc.JdbcTransaction.setDesiredAutoCommit(JdbcTransaction.java:100)  2020-07-18 16:25:56
	- ==>  Preparing: insert into t_user values(null,?,?,?)  com.batis.mapper.UserMapper.insert org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:143)  2020-07-18 16:25:56
	- ==> Parameters: 小白(String), 123(String), 1(Integer) com.batis.mapper.UserMapper.insert org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:143)  2020-07-18 16:25:56
	- <==    Updates: 1 com.batis.mapper.UserMapper.insert org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:143)  2020-07-18 16:25:56
	插入成功
- Committing JDBC Connection [oracle.jdbc.driver.T4CConnection@5d0a1059] org.apache.ibatis.transaction.jdbc.JdbcTransaction org.apache.ibatis.transaction.jdbc.JdbcTransaction.commit(JdbcTransaction.java:69)  2020-07-18 16:25:56
	
Process finished with exit code 0

Delete(删除操作)

和插入操作一样,先在UserMapper.xml中加入delete标签
UserMapper.xml:

    <delete id="delete">
        delete from t_user where uname = #{uname}
    </delete>

UserMapper接口:

    public int delete(User user);

Test02测试类:

    @Test
    public void dalete(){
        User u = new User();
        u.setUname("小白");
        int n = mapper.delete(u);
        if(n==1){
            System.out.println("删除成功");
            session.commit();
        }else{
            System.out.println("删除失败");
            session.rollback();
        }
    }

结果:

D:\Java\jdk-14.0.1_windows-x64_bin\jdk-14.0.1\bin\java.exe -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:D:\JAVA\IntelliJ IDEA 2019.3.2\lib\idea_rt.jar=57000:D:\JAVA\IntelliJ IDEA 2019.3.2\bin" -Dfile.encoding=UTF-8 -classpath "D:\JAVA\IntelliJ IDEA 2019.3.2\lib\idea_rt.jar;D:\JAVA\IntelliJ IDEA 2019.3.2\plugins\junit\lib\junit5-rt.jar;D:\JAVA\IntelliJ IDEA 2019.3.2\plugins\junit\lib\junit-rt.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\out\production\firstmybatis;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\asm-3.3.1.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\cglib-2.2.2.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\commons-logging-1.1.1.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\javassist-3.17.1-GA.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\junit-4.9.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\log4j-1.2.17.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\log4j-api-2.0-rc1.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\log4j-core-2.0-rc1.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\mybatis-3.5.3.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\mysql-connector-java-5.1.48.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\ojdbc6.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\slf4j-api-1.7.5.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\slf4j-log4j12-1.7.5.jar" com.intellij.rt.junit.JUnitStarter -ideVersion5 -junit4 com.batis.test.Test02,dalete
- Logging initialized using 'class org.apache.ibatis.logging.slf4j.Slf4jImpl' adapter. org.apache.ibatis.logging.LogFactory org.apache.ibatis.logging.LogFactory.setImplementation(LogFactory.java:105)  2020-07-18 16:39:09
	- PooledDataSource forcefully closed/removed all connections. org.apache.ibatis.datasource.pooled.PooledDataSource org.apache.ibatis.datasource.pooled.PooledDataSource.forceCloseAll(PooledDataSource.java:353)  2020-07-18 16:39:09
	- PooledDataSource forcefully closed/removed all connections. org.apache.ibatis.datasource.pooled.PooledDataSource org.apache.ibatis.datasource.pooled.PooledDataSource.forceCloseAll(PooledDataSource.java:353)  2020-07-18 16:39:09
	- PooledDataSource forcefully closed/removed all connections. org.apache.ibatis.datasource.pooled.PooledDataSource org.apache.ibatis.datasource.pooled.PooledDataSource.forceCloseAll(PooledDataSource.java:353)  2020-07-18 16:39:09
	- PooledDataSource forcefully closed/removed all connections. org.apache.ibatis.datasource.pooled.PooledDataSource org.apache.ibatis.datasource.pooled.PooledDataSource.forceCloseAll(PooledDataSource.java:353)  2020-07-18 16:39:09
	- Opening JDBC Connection org.apache.ibatis.transaction.jdbc.JdbcTransaction org.apache.ibatis.transaction.jdbc.JdbcTransaction.openConnection(JdbcTransaction.java:136)  2020-07-18 16:39:09
	- Created connection 1213818572. org.apache.ibatis.datasource.pooled.PooledDataSource org.apache.ibatis.datasource.pooled.PooledDataSource.popConnection(PooledDataSource.java:424)  2020-07-18 16:39:10
	- Setting autocommit to false on JDBC Connection [oracle.jdbc.driver.T4CConnection@485966cc] org.apache.ibatis.transaction.jdbc.JdbcTransaction org.apache.ibatis.transaction.jdbc.JdbcTransaction.setDesiredAutoCommit(JdbcTransaction.java:100)  2020-07-18 16:39:10
	- ==>  Preparing: delete from t_user where uname = ?  com.batis.mapper.UserMapper.delete org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:143)  2020-07-18 16:39:10
	- ==> Parameters: 小白(String) com.batis.mapper.UserMapper.delete org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:143)  2020-07-18 16:39:10
	- <==    Updates: 1 com.batis.mapper.UserMapper.delete org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:143)  2020-07-18 16:39:10
	删除成功
- Committing JDBC Connection [oracle.jdbc.driver.T4CConnection@485966cc] org.apache.ibatis.transaction.jdbc.JdbcTransaction org.apache.ibatis.transaction.jdbc.JdbcTransaction.commit(JdbcTransaction.java:69)  2020-07-18 16:39:10
	
Process finished with exit code 0

Update(插入操作)

和查询操作一样,先在UserMapper.xml中加入update标签
UserMapper.xml:

    <update id="update">
        update t_user set uname = #{uname},pwd = #{pwd},sex = #{sex} where tid = #{tid}
    </update>

UserMapper接口:

    public int update(User user);

Test02测试类:

    @Test
    public void update(){
        User u = new User();
        u.setTid(5);
        u.setUname("hj");
        u.setPwd("123");
        u.setSex(1);
        int n = mapper.update(u);
        if(n==1){
            System.out.println("更新成功");
            session.commit();
        }else {
            System.out.println("更新失败");
            session.rollback();
        }
    }

结果:

D:\Java\jdk-14.0.1_windows-x64_bin\jdk-14.0.1\bin\java.exe -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:D:\JAVA\IntelliJ IDEA 2019.3.2\lib\idea_rt.jar=57189:D:\JAVA\IntelliJ IDEA 2019.3.2\bin" -Dfile.encoding=UTF-8 -classpath "D:\JAVA\IntelliJ IDEA 2019.3.2\lib\idea_rt.jar;D:\JAVA\IntelliJ IDEA 2019.3.2\plugins\junit\lib\junit5-rt.jar;D:\JAVA\IntelliJ IDEA 2019.3.2\plugins\junit\lib\junit-rt.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\out\production\firstmybatis;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\asm-3.3.1.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\cglib-2.2.2.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\commons-logging-1.1.1.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\javassist-3.17.1-GA.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\junit-4.9.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\log4j-1.2.17.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\log4j-api-2.0-rc1.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\log4j-core-2.0-rc1.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\mybatis-3.5.3.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\mysql-connector-java-5.1.48.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\ojdbc6.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\slf4j-api-1.7.5.jar;D:\JAVA\JavaProject\Day\MyBatis\firstmybatis\web\WEB-INF\lib\slf4j-log4j12-1.7.5.jar" com.intellij.rt.junit.JUnitStarter -ideVersion5 -junit4 com.batis.test.Test02,update
- Logging initialized using 'class org.apache.ibatis.logging.slf4j.Slf4jImpl' adapter. org.apache.ibatis.logging.LogFactory org.apache.ibatis.logging.LogFactory.setImplementation(LogFactory.java:105)  2020-07-18 16:56:16
	- PooledDataSource forcefully closed/removed all connections. org.apache.ibatis.datasource.pooled.PooledDataSource org.apache.ibatis.datasource.pooled.PooledDataSource.forceCloseAll(PooledDataSource.java:353)  2020-07-18 16:56:16
	- PooledDataSource forcefully closed/removed all connections. org.apache.ibatis.datasource.pooled.PooledDataSource org.apache.ibatis.datasource.pooled.PooledDataSource.forceCloseAll(PooledDataSource.java:353)  2020-07-18 16:56:16
	- PooledDataSource forcefully closed/removed all connections. org.apache.ibatis.datasource.pooled.PooledDataSource org.apache.ibatis.datasource.pooled.PooledDataSource.forceCloseAll(PooledDataSource.java:353)  2020-07-18 16:56:16
	- PooledDataSource forcefully closed/removed all connections. org.apache.ibatis.datasource.pooled.PooledDataSource org.apache.ibatis.datasource.pooled.PooledDataSource.forceCloseAll(PooledDataSource.java:353)  2020-07-18 16:56:16
	- Opening JDBC Connection org.apache.ibatis.transaction.jdbc.JdbcTransaction org.apache.ibatis.transaction.jdbc.JdbcTransaction.openConnection(JdbcTransaction.java:136)  2020-07-18 16:56:16
	- Created connection 501705927. org.apache.ibatis.datasource.pooled.PooledDataSource org.apache.ibatis.datasource.pooled.PooledDataSource.popConnection(PooledDataSource.java:424)  2020-07-18 16:56:16
	- Setting autocommit to false on JDBC Connection [oracle.jdbc.driver.T4CConnection@1de76cc7] org.apache.ibatis.transaction.jdbc.JdbcTransaction org.apache.ibatis.transaction.jdbc.JdbcTransaction.setDesiredAutoCommit(JdbcTransaction.java:100)  2020-07-18 16:56:16
	- ==>  Preparing: update t_user set uname = ?,pwd = ?,sex = ? where tid = ?  com.batis.mapper.UserMapper.update org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:143)  2020-07-18 16:56:16
	- ==> Parameters: hj(String), 123(String), 1(Integer), 5(Integer) com.batis.mapper.UserMapper.update org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:143)  2020-07-18 16:56:16
	- <==    Updates: 1 com.batis.mapper.UserMapper.update org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:143)  2020-07-18 16:56:16
	更新成功
- Committing JDBC Connection [oracle.jdbc.driver.T4CConnection@1de76cc7] org.apache.ibatis.transaction.jdbc.JdbcTransaction org.apache.ibatis.transaction.jdbc.JdbcTransaction.commit(JdbcTransaction.java:69)  2020-07-18 16:56:16
	
Process finished with exit code 0

总结:

  1. mapper.xml 文件中, 通过insert,delete,update定义新增语句. 注意, 由于 DML 操作的返回值都是 int 类型 , 所以 , 不需要定义 resultType 属性.
  2. mapper.xml文件中,当传入的值是普通数据类型时,通过#{arg0},#{arg1}或者#{param1},#{param2}来获得参数
  3. mapper.xml中,当传入的值是自定义数据类型,通过#{属性名}获取属性值
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值