目录

实验目的

实验内容

实验步骤

测试CRUD

用注解方法实现:

测试:

实验总结

总结

实验目的

掌握MyBatis的实质;掌握MyBatis的两大类型配置文件;掌握MyBatis进行CRUD操作的实现方式。

实验内容

(1) 配置Mybatis的核心配置文件以及映射文件;

(2) 应用Mybatis实现一张表的增、删、改、查。

(3) 测试增、删、改、查

实验步骤

导入mybatis的依赖和数据库的驱动依赖

mysql

mysql-connector-java

5.1.47

org.mybatis

mybatis

3.5.2

junit

junit

4.12

编写mybatis的核心配置文件(mybatis-config.xml)

PUBLIC "-//mybatis.org//DTD Config 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-config.dtd">

建立实体类User,属性要和数据库表名对应

public class User {

private int id;

private String account;

private double balance;

private String password;

public User() {

}

public User(String account, double balance, String password) {

this.account = account;

this.balance = balance;

this.password = password;

}

public User(int id, String account, double balance, String password) {

this.id = id;

this.account = account;

this.balance = balance;

this.password = password;

}

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getAccount() {

return account;

}

public void setAccount(String account) {

this.account = account;

}

public double getBalance() {

return balance;

}

public void setBalance(double balance) {

this.balance = balance;

}

public String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password;

}

@Override

public String toString() {

return "User{" +

"id=" + id +

", account='" + account + '\'' +

", balance=" + balance +

", password='" + password + '\'' +

'}';

}

}

建立UserMapper接口

public interface UserMapper {

public User selectUserById(int id);

/*添加用户*/

public int insertUser(User user);

/*修改用户*/

public int updateUser(User user);

/*删除用户*/

public int deleteUserById(int id);

建立UserMapper接口的实现 UserMapper.xml

PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

insert into user values(null,#{account},#{balance},#{password})

update user set account =#{account}, balance = #{balance}, password = #{password} where id = #{id} ;

delete from user where id = #{id}

编写MyBatis的工具类

public class MyBatisUtil {

private static SqlSessionFactory sqlSessionFactory;

static{

String resource = "mybatis-config.xml";

InputStream inputStream = null;

try {

inputStream = Resources.getResourceAsStream(resource);

sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

} catch (IOException e) {

e.printStackTrace();

}

}

public static SqlSession getSqlSession(){

return sqlSessionFactory.openSession();

}

SqlSessionFactoryBuilder:

一旦创建了 SqlSessionFactory,就不再需要它了

局部变量

SqlSessionFactory:

。说自了就是可以想象为: 数据库连接池

·SqlSessionFactory 一旦被创建就应该在应用的运行期间一直存在,没有任何理由丢弃它或重新创建另一个实例。

。因此SqlSessionFactory 的最佳作用域是应用作用域

。最简单的就是使用单例模式或者静态单例模式

SqlSession

连接到连接池的一个请求!

SqlSession 的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用

用完之后需要赶紧关闭,否则资源被占用!

测试CRUD

@Test //测试查找selectUserById

public void test(){

SqlSession sqlSession = MyBatisUtil.getSqlSession();

UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

User user = userMapper.selectUserById(3);

// User user = userMapper.selectUserById(4); //此时表中无此条记录

System.out.println(user);

sqlSession.close();

}

@Test //测试增加,注意增删改需要提交事务

public void test1(){

SqlSession sqlSession = MyBatisUtil.getSqlSession();

UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

int res = userMapper.insertUser(new User("xixi",1000,"xx"));

System.out.println(res);

sqlSession.commit();

sqlSession.close();

}

@Test //测试修改,注意增删改需要提交事务

public void test2(){

SqlSession sqlSession = MyBatisUtil.getSqlSession();

UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

int res = userMapper.updateUser(new User(3,"xixi",1000,"xx"));

System.out.println(res);

sqlSession.commit();

sqlSession.close();

@Test //测试删除,注意增删改需要提交事务

public void test3(){

SqlSession sqlSession = MyBatisUtil.getSqlSession();

UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

int res = userMapper.deleteUserById(12);

System.out.println(res);

sqlSession.commit();

sqlSession.close();

用注解方法实现:

public interface UserDAO {

@Select("select * from user")

List getUserList();

@Select("select * from user where id =#{id}")

public User selectUserById(int id);

/*添加用户*/

@Insert("insert into user values(null,#{account},#{balance},#{password})")

public int insertUser(User user);

/*修改用户*/

@Update("update user set account=#{account},balance=#{balance},password=#{password} where id =#{id}")

public int updateUser(User user);

/*删除用户*/

@Delete("delete from user where id =#{id}")

public int deleteUserById(int id);

/*修改余额*/

@Update("update user set balance=balance-#{balance} where id=#{id}")

public int updateBalance(@Param("balance") double balance, @Param("id") int id);

}

/*根据account查询用户*/

@Select("select * from user where account =#{account}")

List< User> selectUserByAccount(@Param("account")String account);

测试:

public void selectUserByAccount() {

SqlSession session =MyBatisUtil.getSqlSession();

UserDAO userDAO =session.getMapper(UserDAO.class);

System.out.println(userDAO.selectUserByAccount("txq"));

配置映射文件:

实验总结

遇到的问题:

解决方法:

因为maven默认只拷贝resources下的xml及小配置文件。现在我们的配置文件放在了java源文件的包中,因此出错。需要在pom文件中设置resources以及resource,让maven去拷贝我们需要的文件到classpath路径下。

src/main/resources

**/*.properties

**/*.xml

true

src/main/java

**/*.properties

**/*.xml

true

问题2:

解决方法:

总结

本次实验学习了Mybatis框架的基本使用,包括配置核心配置文件和映射文件,并且应用Mybatis实现了一张表的增、删、改、查操作。

在配置核心配置文件时,需要指定数据库连接信息、事务管理器、mapper映射器等信息。同时还可以设置一些全局属性,如驼峰命名规则、缓存配置等。

在配置映射文件时,需要定义SQL语句以及参数映射规则。通过使用#{}占位符来指定参数,Mybatis会根据参数类型自动进行类型转换。

对于增、删、改操作,需要在映射文件中定义相应的SQL语句,并且在Java代码中调用Mapper接口中相应的方法来执行。在执行完SQL语句后,Mybatis会自动将返回结果映射到Java对象中。

对于查询操作,同样需要在映射文件中定义SQL语句,并且在Java代码中调用Mapper接口中相应的方法来执行。查询操作可以返回单个对象、集合对象或者分页对象等。在执行查询操作时,Mybatis会根据映射文件中定义的结果集映射规则,自动将查询结果映射到Java对象中。

总体来说,Mybatis框架简化了数据访问层的开发,提高了开发效率,同时也降低了代码耦合度。在实际项目中,可以根据需要选择不同的ORM框架来进行数据访问层的开发。

好文链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: