mybatis的修改和根据id查询

mybatis的工作原理:

MyBatis的基本工作原理就是:先封装SQL,接着调用JDBC操作数据库,最后把数据库返回的表结果封装成Java类。

  1. SqlSession对象,该对象中包含了执行SQL语句的所有方法。 类似于JDBC里面的Connection。
  2. Executor接口,它将根据SqlSession传递的参数动态地生成需要执行的SQL语句,同时负责查询缓存的维护。

 mybatis根据id查询

先创建数据库

create database mydb;
-- 使用数据库
use mydb;

-- 创建表
create table t_user
(
  uid int primary key auto_increment,
	username varchar(20),
	password varchar(20),
	phone varchar(11),
	address varchar(50)
);
insert into t_user(username,password,phone,address) value('张三','666','18965423548','南阳');
insert into t_user(username,password,phone,address) value('李四','333','18754263548','许昌');
insert into t_user(username,password,phone,address) value('小美','123','18565234759','信阳');

在bean包中创建实体类

public class User {
    private Integer uid;
    private String username;
    private String password;
    private String phone;
    private String address;

    public Integer getUid() {
        return uid;
    }

    public void setUid(Integer uid) {
        this.uid = uid;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getAddress() {
        return address;
    }

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

    @Override
    public String toString() {
        return "User{" +
                "uid=" + uid +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", phone='" + phone + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}

在dao包中创建UserDao接口进行编写根据id查询方法

public interface UserDao {
  User selectByUid(int uid);
}

创建核心文件连接数据库

<?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>
    <environments default="mysql">
        <environment id="mysql">
            <transactionManager type="jdbc"></transactionManager>
            <dataSource type="pooled">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mydb"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper class="com.qi.dao.UserDao"/>
    </mappers>
</configuration>

然后在mapper文件编写根据id查询语句

<?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">
<!--namespace:把配置文件和接口进行映射-->
<mapper namespace="com.qi.dao.UserDao">
    <select id="selectByUid" parameterType="int" resultType="com.qi.bean.User">
        select*from t_user where uid=#{uid};
    </select>
</mapper>

最后在测试类里进行测试

public class UserTest {
    InputStream stream=null;
    SqlSessionFactoryBuilder builder=null;
    SqlSessionFactory factory=null;
    SqlSession sqlsession=null;
    UserDao userDao=null;
    @Before
    public void init() throws IOException {
        //加载核心文件
        stream= Resources.getResourceAsStream("mybatis.xml");
        //创建SqlSessionFactoryBuilder构建对象
        builder=new SqlSessionFactoryBuilder();
        //通过构建对象加载文件的输入流
        factory= builder.build(stream);
        //通过工厂对象获取SqlSession对象
        sqlsession = factory.openSession();
        //通过Sqlsession对象获取接口对应的代理对象
        userDao = sqlsession.getMapper(UserDao.class);
    }


    @Test
    public void testSelectByUid(){
        User user = userDao.selectByUid(1);
        System.out.println(user);
    }

    @After
    public void destory() throws IOException {
        sqlsession.commit();
        sqlsession.close();
        stream.close();
    }
}

结果如下:

 

 

测试类里测试的步骤: 

1.获取sqlSessionFactory对象
2.获取sqlSession对象
3.获取mapper接口的代理对象(MapperProxy)
4.执行增删改查方法

 mybatis的修改

在UserDao接口中编写修改方法

public interface UserDao {
    User selectByUid(int uid);
}

然后在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">
<!--namespace:把配置文件和接口进行映射-->
<mapper namespace="com.qi.dao.UserDao">
    <update id="update" parameterType="com.qi.bean.User" >
        update t_user set username=#{username},password=#{password},phone=#{phone},address=#{address} where uid=#{uid};
    </update>
</mapper>

最后在测试类里进行测试

public class UserTest {
    InputStream stream=null;
    SqlSessionFactoryBuilder builder=null;
    SqlSessionFactory factory=null;
    SqlSession sqlsession=null;
    UserDao userDao=null;
    @Before
    public void init() throws IOException {
        //加载核心文件
        stream= Resources.getResourceAsStream("mybatis.xml");
        //创建SqlSessionFactoryBuilder构建对象
        builder=new SqlSessionFactoryBuilder();
        //通过构建对象加载文件的输入流
        factory= builder.build(stream);
        //通过工厂对象获取SqlSession对象
        sqlsession = factory.openSession();
        //通过Sqlsession对象获取接口对应的代理对象
        userDao = sqlsession.getMapper(UserDao.class);
    }
    
    @Test
    public void testUpdate(){
        //1.数据库
        User oldUser=userDao.selectByUid(3);
        System.out.println("修改前:"+oldUser);
        //根据需要修改字段值
        oldUser.setUsername("修改测试");
        oldUser.setAddress("河南郑州");
        //3.执行数据库更新
        userDao.update(oldUser);
        //4.再次查询
        User newUser=userDao.selectByUid(3);
        System.out.println("修改后:"+newUser);
    }

    @After
    public void destory() throws IOException {
        sqlsession.commit();
        sqlsession.close();
        stream.close();
    }
}

修改的操作

根据id查询数据信息

然后更改User对象里的名字信息和地址信息

结果如下:

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值