Mybatis入门-增删改查

一.导包

  1.导3类包:mybatis核心包,mybatis依赖包,驱动包

二.设计表,创建表

三.创建实体类

四.创建主配置文件,映射文件

  1.主配置文件sqlMapConfig.xml,文件基本配置内容如下:

复制代码
<?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>
    <!-- 和spring整合后 environments配置将废除    -->
    <environments default="development">
        <environment id="development">
            <!-- 使用jdbc事务管理 -->
            <transactionManager type="JDBC" />
            <!-- 数据库连接池 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url"
                    value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" />
                <property name="username" value="root" />
                <property name="password" value="123" />
            </dataSource>
        </environment>
    </environments>
    
<mappers>
    <mapper resource="sqlmap/User.xml"/>
</mappers>
</configuration>
复制代码

  由于是单独使用mybatis作为演示,所以得在environments标签中配置数据库的参数信息,等到学习spring整合时,就不需要该标签啦

  2.映射文件配置sql查询语句

复制代码
<?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">
<!-- 写Sql语句   -->
<mapper namespace="test">
    <select id="findUserById" parameterType="Integer" resultType="cn.itheima.mybatis.pojo.User">
        select * from user where id = #{v}
    </select>
</mapper>  namespace:为访问指定sql配置标签的前缀;
复制代码
  select标签的id:起到标识的作用;
  parameterType:传入参数的类型
  resultType:返回结果集自动映射的类型,前提是保证表列名跟类属性名一致
  #{}:代表占位符,括号里面任意

五.junit测试按ID查询
复制代码
public class JunitTest {
    
    @Test
//按ID查询
public void test1() { //加载主配置文件 String resource = "sqlMapConfig.xml"; try { //获取指向该配置的流,默认从classpath路径下查找 InputStream in = Resources.getResourceAsStream(resource); //获取工厂 SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in); //获取session SqlSession session = factory.openSession(); //执行sql语句 User user = session.selectOne("test.findUserById", 10); System.out.println(user); } catch (IOException e) { e.printStackTrace(); } } }
复制代码
  由于主配置文件的命名规范没有做硬性要求,所以我们需要拿到该配置文件的流对象或者其他形式的对象;不同于hibernate的主配置文件的位置和命名做了限制,在获取时不需手动指定配置文件路径!

六.按名字模糊查询
  
复制代码
    @Test
    //模糊查询
    public void test2() {
        //加载主配置文件
        String resource = "sqlMapConfig.xml";
        
        try {
            //获取指向该配置的流
            InputStream in = Resources.getResourceAsStream(resource);
            
            //获取工厂
            SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
            
            //获取session
            SqlSession session = factory.openSession();
            
            //执行sql语句
            List<User> list = session.selectList("test.findUserByName", "五");
            
            System.out.println(list);
            
        } catch (IOException e) {
            e.printStackTrace();
        }
        
    }
复制代码
复制代码
<mapper namespace="test">
    <select id="findUserById" parameterType="Integer" resultType="cn.itheima.mybatis.pojo.User">
        select * from user where id = #{v}
    </select>
    
    <select id="findUserByName" parameterType="String" resultType="cn.itheima.mybatis.pojo.User">
        select * from user where username like "%"#{value}"%"
    </select>
</mapper>
复制代码

  这里resultType不是List<User>,当返回结果集为多行记录时,resultType代表集合的泛型

  普及一下:#{ }和${ };${ }输入参数若是简单类型,括号内必须为value,该方式会引起sql攻击

 

 七.添加用户

复制代码
    @Test
    //添加用户
    public void test3() {
        //加载主配置文件
        String resource = "sqlMapConfig.xml";
        
        try {
            //获取指向该配置的流
            InputStream in = Resources.getResourceAsStream(resource);
            
            //获取工厂
            SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
            
            //获取session
            SqlSession session = factory.openSession();
            
            //执行sql语句
            User user = new User();
            user.setUsername("曾志伟");
            
            session.insert("test.insertUser",user);
            
            session.commit();
            
        } catch (IOException e) {
            e.printStackTrace();
        }
        
    }
复制代码
    <insert id="insertUser" parameterType="cn.itheima.mybatis.pojo.User">
        insert into user (username) values( #{username} )
    </insert>

 parameterType类型为user,sql语句的占位符不需要写成#{user.username},只要保证占位符里的属性名和传入参数的类的属性名一致即可

对数据库进行增删改(不包括查),需要提交事务才能同步到数据库

八.添加用户返回ID插入到对象
复制代码
    @Test
    //添加用户返回ID
    public void test4() {
        //加载主配置文件
        String resource = "sqlMapConfig.xml";
        
        try {
            //获取指向该配置的流
            InputStream in = Resources.getResourceAsStream(resource);
            
            //获取工厂
            SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
            
            //获取session
            SqlSession session = factory.openSession();
            
            //执行sql语句
            User user = new User();
            user.setUsername("本伟");
            
            session.insert("test.insertUser",user);
            
       //获取Id System.out.println(user.getId()); session.commit(); }
catch (IOException e) { e.printStackTrace(); } }
复制代码

  

<insert id="insertUser" parameterType="cn.itheima.mybatis.pojo.User">
  <selectKey keyProperty="id" resultType="Integer" order="AFTER">
    select LAST_INSERT_ID()
  </selectKey>
    insert into user (username) values( #{username} )
</insert>

  order:这可以被设置为 BEFORE 或 AFTER。如果设置为 BEFORE,那么它会首先选择主键,设置 keyProperty 然后执行插入语句。如果设置为 AFTER,那么先执行插入语句,然后是 selectKey 元素

  select LAST_INSERT_ID():是mysql提供的查询

九.修改用户

复制代码
    @Test
    //修改用户
    public void test5() {
        //加载主配置文件
        String resource = "sqlMapConfig.xml";
        
        try {
            //获取指向该配置的流
            InputStream in = Resources.getResourceAsStream(resource);
            
            //获取工厂
            SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
            
            //获取session
            SqlSession session = factory.openSession();
            
            //执行sql语句
            User user = new User();
            user.setId(29);
            user.setUsername("本伟nbbb");
            
            session.update("test.updateByUser", user);
            
            session.commit();
            
        } catch (IOException e) {
            e.printStackTrace();
        }
        
    }
复制代码
<updateid="updateByUser" parameterType="cn.itheima.mybatis.pojo.User">
        update user set username = #{username} where id = #{id}
</update>

 

十.删除用户

复制代码
    @Test
    //删除用户
    public void test6() {
        //加载主配置文件
        String resource = "sqlMapConfig.xml";
        
        try {
            //获取指向该配置的流
            InputStream in = Resources.getResourceAsStream(resource);
            
            //获取工厂
            SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
            
            //获取session
            SqlSession session = factory.openSession();
            
            //执行sql语句
            session.update("test.deleteById", 29);
            
            session.commit();
            
        } catch (IOException e) {
            e.printStackTrace();
        }
        
    }
复制代码
    <delete id="deleteById" parameterType="Integer">
        delete from user where id = #{id}
    </delete>

 

posted @   爱编程DE文兄  阅读(174)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示