mybatis教程1(基本使用)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
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

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
SQL
MyBatis-Plus 实战教程二 核心功能(三)
MyBatis-Plus 实战教程二 核心功能
65 0
|
1月前
|
SQL Java 数据库连接
MyBatis-Plus 实战教程二 核心功能(一)
MyBatis-Plus 实战教程二 核心功能
80 0
|
1月前
|
SQL Java 数据库连接
看完即可上手 MyBatis-Plus 的教程
看完即可上手 MyBatis-Plus 的教程
34 0
|
1月前
|
XML Java 数据库连接
MyBatis--映射关系一对一和MyBatis--映射关系多对一 -都有基于xml和注解的教程
MyBatis--映射关系一对一和MyBatis--映射关系多对一 -都有基于xml和注解的教程
94 0
|
1月前
|
XML Java 数据库连接
Mybatis-Plus学习小项目及详细教程
Mybatis-Plus学习小项目及详细教程
|
1月前
|
XML 监控 druid
【Java专题_02】springboot+mybatis+pagehelper分页插件+druid数据源详细教程
【Java专题_02】springboot+mybatis+pagehelper分页插件+druid数据源详细教程
74 0
|
1月前
|
SQL Java 数据库连接
【MyBatisPlus】通俗易懂 快速入门 详细教程
【MyBatisPlus】通俗易懂 快速入门 详细教程
106 0
|
1月前
|
Java 数据库连接 数据库
Spring Boot整合Mybatis Plus[极简教程]
Spring Boot整合Mybatis Plus[极简教程]
64 0
|
1月前
|
SQL 缓存 Java
Mybatis保姆级丝滑教程(一文搞懂系列)(2)
Mybatis保姆级丝滑教程(一文搞懂系列)
180 0
|
1月前
|
SQL Java 关系型数据库
Mybatis保姆级丝滑教程(一文搞懂系列)(1)
Mybatis保姆级丝滑教程(一文搞懂系列)
268 0