mybatis教程1(基本使用)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: mybatis教程1(基本使用)

image.png

<dependencies>
  <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.4.6</version>
  </dependency>
  <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.27</version>
  </dependency>
</dependencies>

image.png

<?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="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/ssm?characterEncoding=utf-8"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
      </dataSource>
    </environment>
  </environments>
</configuration>

image.png

grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
flush privileges;

image.pngimage.pngimage.png

<?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="dpb">
  <insert id="addUser" parameterType="com.sxt.dao.User">
    insert into t_user(name,age)values(#{name},#{age})
  </insert>
  <delete id="deleteUserById" parameterType="java.lang.Integer"> 
    delete from t_user where id=#{id}    
  </delete>
  <update id="updateUserById" parameterType="com.sxt.dao.User"> 
    update t_user set name = #{name} where id=#{id}    
  </update>
  <select id="getUserById" parameterType="java.lang.Integer" resultType="com.sxt.dao.User"> 
    select * from t_user where id=#{id}   
  </select>
</mapper>

image.png

<?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="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/ssm"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
      </dataSource>
    </environment>
  </environments>
  <!-- 注册映射文件 -->
  <mappers>
    <mapper resource="com/sxt/dao/UserMapper.xml"/>
  </mappers>
</configuration>

image.png

  @Test
  public void add() throws IOException {
    // 1.通过Resources对象加载配置文件
    InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
    // 2.获取SqlSessionFactory对象
    SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream );
    // 3.通过SqlSessionFactory对象获取SQLSession对象
    SqlSession session = factory.openSession();
    User user = new User();
    user.setName("dpb");
    user.setAge(22);
    // dpb.addUser  是映射文件中 namespace的内容加 id的内容,定位要执行的SQL
    int count = session.insert("dpb.addUser", user);
    System.out.println("影响的行数:"+count);
    // 需要显示的提交
    session.commit();
    session.close();
  }
}

image.pngimage.png

public class Test02 {
  private SqlSession sqlSession;
  @Before
  public void before() throws IOException {
    // 1. 加载配置文件
    InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
    // 2. 根据配置文件获取一个SqlSessionFactory对象,这个对象相当于连接工厂
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
    // 3. 获取一个sqlsession,sqlsession类似于之前学过的Connection
    sqlSession = sqlSessionFactory.openSession();
  }
  @After
  public void after() {
    sqlSession.commit();
    sqlSession.close();
  }
  @Test
  public void test1() {
    User user = new User();
    user.setId(7);
    user.setName("里斯1");
    int update = sqlSession.update("dpb.updateUserById", user);
    System.out.println(update);
  }
  @Test
  public void test2() {
    int delete = sqlSession.delete("dpb.deleteUserById", 7);
    System.out.println(delete);
  }
  @Test
  public void test3() {
    User user = (User) sqlSession.selectOne("dpb.getUserById", 8);
    System.out.println(user);
  }
}

image.png

/**
 * 工具类  对外提供SqlSessionFactory的单例对象
 * @author dengp
 *
 */
public class DbUtils {
  private static  SqlSessionFactory factory ;
  public static SqlSessionFactory getInstace(){
    if(factory ==null){
      InputStream in = null;
      try{
        in = Resources.getResourceAsStream("mybatis-config.xml");
      }catch(Exception e){
        e.printStackTrace();
      }
      synchronized (DbUtils.class) {
        if(factory ==null){
          factory = new SqlSessionFactoryBuilder().build(in);
        }
      }
    }
    return factory;
  }
}

image.png

public interface UserMapper {
  public int addUser(User user);
  public int updateById(User user);
  public int deleteById(int id);
  public User queryById(int id);
}
public class UserDao implements UserMapper {
  @Override
  public int addUser(User user) {
    return DBUtils.getInstall().openSession().insert("com.sxt.dao.UserMapper.addUser", user);
  }
  @Override
  public int updateById(User user) {
    // TODO Auto-generated method stub
    return DBUtils.getInstall().openSession().update("com.sxt.dao.UserMapper.updateById", user);
  }
  @Override
  public int deleteById(int id) {
    // TODO Auto-generated method stub
    return DBUtils.getInstall().openSession().delete("com.sxt.dao.UserMapper.deleteById", id);
  }
  @Override
  public User queryById(int id) {
    // TODO Auto-generated method stub
    return DBUtils.getInstall().openSession().selectOne("com.sxt.dao.UserMapper.queryById", 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">
<mapper namespace="com.sxt.dao.UserMapper">
  <insert id="addUser" parameterType="com.sxt.bean.User">
    insert into t_user(name,age)values(#{name},#{age})    
  </insert>
  <delete id="deleteById" parameterType="java.lang.Integer">
    delete from t_user where id=#{id}
  </delete>
  <update id="updateById" parameterType="com.sxt.bean.User">
    update t_user 
    set name=#{name},age=#{age}
    where id=#{id}
  </update>
  <select id="queryById" parameterType="java.lang.Integer"
    resultType="com.sxt.bean.User">
    select * from t_user where id=#{id}
  </select>
</mapper>
/**
 * 代理方式
 */
@Test
public void test(){
  UserMapper mapper = (UserMapper) Proxy.newProxyInstance(UserMapper.class.getClassLoader()
      , new Class[]{UserMapper.class},new InvocationHandler() {
        @Override
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
          System.out.println(UserMapper.class.getName()+"."+method.getName());
          Object id = null;
          for (Object object : args) {
            System.out.println(object);
            id = object;
          }
          // 实现逻辑
          return DBUtils.getInstall().openSession().selectOne(UserMapper.class.getName()+"."+method.getName(), id);
        }
      } );
  System.out.println(mapper.queryById(5));
}

image.png

public interface UserMapper {
  public int addUser(User user);
}

image.png

<?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.sxt.dao.UserMapper">
  <!-- id必须和接口声明的方法一致 -->
  <insert id="addUser" parameterType="com.sxt.bean.User">
    insert into t_user(name,age)values(#{name},#{age})
  </insert>
</mapper>

image.png

@Test
public void add() throws IOException {
  // 1.通过Resources对象加载配置文件
  InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
  // 2.获取SqlSessionFactory对象
  SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream );
  // 3.通过SqlSessionFactory对象获取SQLSession对象
  SqlSession session = factory.openSession();
  User user = new User();
  user.setName("dpb");
  user.setAge(22);
  //通过Java动态代理自动提供了UserMapper的实现类
  UserMapper mapper = session.getMapper(UserMapper.class);
  int count = mapper.addUser(user);
  System.out.println("影响的行数:"+count);
  session.commit();
}

image.png

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
SQL Java 数据库连接
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
MyBatis-Plus是一个MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。本文讲解了最新版MP的使用教程,包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段等核心功能。
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
|
1月前
|
SQL 缓存 Java
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
本文详细介绍了MyBatis的各种常见用法MyBatis多级缓存、逆向工程、分页插件 包括获取参数值和结果的各种情况、自定义映射resultMap、动态SQL
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
|
1月前
|
SQL 存储 数据库
深入理解@TableField注解的使用-MybatisPlus教程
`@TableField`注解在MyBatis-Plus中是一个非常灵活和强大的工具,能够帮助开发者精细控制实体类与数据库表字段之间的映射关系。通过合理使用 `@TableField`注解,可以实现字段名称映射、自动填充、条件查询以及自定义类型处理等高级功能。这些功能在实际开发中,可以显著提高代码的可读性和维护性。如果需要进一步优化和管理你的MyBatis-Plus应用程
171 3
|
2月前
|
前端开发 Java Apache
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
本文详细讲解了如何整合Apache Shiro与Spring Boot项目,包括数据库准备、项目配置、实体类、Mapper、Service、Controller的创建和配置,以及Shiro的配置和使用。
511 1
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
|
4月前
|
XML 缓存 Java
一文讲明Mybatis 的使用 超详细 【爆肝两万字教程】
文章提供了一份详尽的Mybatis使用教程,涵盖了Mybatis的简介、环境搭建、基本操作、配置解析、日志使用、分页、注解开发、多对一和一对多关系处理、动态SQL以及缓存机制等方面的内容,并提供了相应的代码示例和测试用例。
一文讲明Mybatis 的使用 超详细 【爆肝两万字教程】
|
4月前
|
SQL Java 数据库连接
Spring Boot联手MyBatis,打造开发利器:从入门到精通,实战教程带你飞越编程高峰!
【8月更文挑战第29天】Spring Boot与MyBatis分别是Java快速开发和持久层框架的优秀代表。本文通过整合Spring Boot与MyBatis,展示了如何在项目中添加相关依赖、配置数据源及MyBatis,并通过实战示例介绍了实体类、Mapper接口及Controller的创建过程。通过本文,你将学会如何利用这两款工具提高开发效率,实现数据的增删查改等复杂操作,为实际项目开发提供有力支持。
284 0
|
4月前
|
Java 关系型数据库 MySQL
MyBatisPlus如何根据id批量查询?Required request parameter ‘id‘ for method 解决方法是看青戈大佬MybatisPlus的教程
MyBatisPlus如何根据id批量查询?Required request parameter ‘id‘ for method 解决方法是看青戈大佬MybatisPlus的教程
|
7月前
|
XML Java 数据库连接
MyBatis--映射关系一对一和MyBatis--映射关系多对一 -都有基于xml和注解的教程
MyBatis--映射关系一对一和MyBatis--映射关系多对一 -都有基于xml和注解的教程
137 0
|
7月前
|
XML Java 数据库连接
Mybatis-Plus学习小项目及详细教程
Mybatis-Plus学习小项目及详细教程
下一篇
DataWorks