Mybatis基本使用 您所在的位置:网站首页 mybatis基本使用 Mybatis基本使用

Mybatis基本使用

2022-10-15 22:17| 来源: 网络整理| 查看: 265

1. Maven工程POM文件添加的依赖(JUNIT依赖未列出)

org.mybatis mybatis 3.2.2

2. Mybatis三个必备元素和一个辅助元素

(1) Mybatis环境配置文件:主要设置连接数据库所需要的信息(如:连接方式、驱动、数据库URL、用户名和密码等),同时也放了一些其它的信息,方便开发;(对应Demo文件:mybatis-config.xml)

(2) SQL映射文件:主要存放自己编辑的SQL语句及一些表与类的映射关系;(对应Demo文件:UserMapper.xml)

(3) 接口类:接口类的方法主要与SQL映射文件中对应ID的SQL语句进行映射(映射方式有两种,具体在Demo后有说明),实现在调用接口类对应方法时,方法会调相应SQL语句,并根据配置返回相应结果;(对应Demo文件:UserDao.java)

(4) 接口实现类:这是一个辅助元素,主要是为了自主地配置接口类中方法与SQL映射文件中SQL语句的映射关系。(对应Demo文件:UserDaoImpl.java)

工程文件结构:

红框部分为本文内容相关的文件。

3. Demo代码

(1) mybatis-config.xml文件:

(2) UserMapper.xml文件:

select * from user; select * from user where id = #{userId, jdbcType=INTEGER} limit 0, 1; insert into user(username, password) values(#{username, jdbcType=VARCHAR}, #{password, jdbcType=VARCHAR}); update user username = #{username,jdbcType=VARCHAR}, password = #{password,jdbcType=VARCHAR}, where id = #{userId, jdbcType=INTEGER}; delete from user where id = #{userId, jdbcType=INTEGER}; (3)  UserDao.java文件:

package tutorial.demo.database; import java.util.List; public interface UserDao { public long insert(User user); public long update(User user); public long delete(long userId); public List selectAllUser(); public User selectUserById(long userId); }

(4) UserDaoImpl.java文件:

package tutorial.demo.database; import java.util.List; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; public class UserDaoImpl implements UserDao { SqlSessionFactory factory = null; public UserDaoImpl() { } public UserDaoImpl(SqlSessionFactory factory) { this.factory = factory; } public SqlSessionFactory getFactory() { return factory; } public void setFactory(SqlSessionFactory factory) { this.factory = factory; } public long insert(User user) { SqlSession session = factory.openSession(); session.insert("insert", user); return user.getUserId(); } public long update(User user) { SqlSession session = factory.openSession(); session.update("update", user); return user.getUserId(); } public long delete(long userId) { SqlSession session = factory.openSession(); session.delete("delete", userId); return userId; } public List selectAllUser() { SqlSession session = factory.openSession(); List userList = session.selectList("selectAllUser"); return userList; } public User selectUserById(long userId) { SqlSession session = factory.openSession(); User user = session.selectOne("selectUserById", userId); return user; } }(5) MybatisTest.java文件(这个是一个基于JUNIT的测试类):

package tutorial.demo.database.test; import java.io.IOException; import java.io.Reader; import java.util.List; 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.Before; import org.junit.Test; import tutorial.demo.database.User; import tutorial.demo.database.UserDao; import tutorial.demo.database.UserDaoImpl; public class MybatisTest { SqlSessionFactory factory; // 在测试用例执行前执行 @Before public void init() throws IOException { // 在使用数据时,加载数据配置文件,在需时与数据库通信时,根据配置创建会话。 String resource = "classpath:resources/mybatis-config.xml"; Reader reader = Resources.getResourceAsReader(resource); SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); factory = builder.build(reader); } // 直接使用接口的测试用例:由mybatis相关功能创建方法与对应SQL操作id的映射 @Test public void testDao() { // 创建会话 SqlSession session = factory.openSession(); // 建立UserMapper.xml定义的SQL语句与UserDao接口中方法的映射关系 UserDao userDao = session.getMapper(UserDao.class); User user = new User(); user.setUserName("fengfeng"); user.setPassword("123456"); userDao.insert(user); // 输出返回的用户ID System.out.println("The user id is: " + user.getUserId()); } // 使用接口实现的测试用例:开发人员自定义方法与SQL操作id的映射关系 @Test public void testDaoImpl() { UserDao userDao = new UserDaoImpl(factory); User user = new User(); user.setUserName("tiantian"); user.setPassword("654321"); userDao.insert(user); List userList = userDao.selectAllUser(); for (User u: userList) { System.out.println(u.getUserId() + "\t\t" + u.getUserName() + "\t\t" + u.getPassword()); } } }

4. 说明

在上面的测试类中,我们可以看到有两种方式的调用方式:使用接口类的调用方式和使用接口实现类的调用方式,其中,

(1) 接口类的调用方式

接口类的调用方式使用

UserDao userDao = session.getMapper(UserDao.class);这一句使得接口类中的方法与SQL映射文件中 同名ID的SQL语句构成一个映射关系,当调用接口方法时,自动去执行相应的SQL语句,SQL语句执行结果以接口返回类型返回。

(2) 接口实现类的调用方式

对使用接口实现类调用方式中,我们没有使用到上述的方法,因为在实现类中,我们已经在方法实现里映射的SQL语句,所以不再需要调用SqlSession.getMapper()进行映射。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有