mybatis(二)_入门程序

本文介绍了MyBatis框架的基本概念及使用方法,包括环境搭建、配置文件解析、基本CRUD操作实现等,并提供了完整的示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是 MyBatis ?

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

官方文档介绍

MyBatis框架原理

这里写图片描述

入门程序

1.需求

(数据库文件在mybatis(一)文章代码中)

  • 根据用户id(主键)查询用户信息
  • 根据用户名称模糊查询用户信息
  • 添加用户
  • 删除 用户
  • 更新用户
2.项目框架

这里写图片描述

3.log4j.properties文件
# Global logging configuration
#开发环境debug 生产环境 info
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - 
4.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>


    <environments default="development">
        <environment id="development">
        <!-- 使用jdbc事务管理,事务控制由mybatis-->
            <transactionManager type="JDBC" />
        <!-- 数据库连接池,由mybatis管理-->
            <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>
5.映射文件User.xml
<?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命名空间,作用就是对sql进行分类化管理,理解sql隔离 
注意:使用mapper代理方法开发,namespace有特殊重要的作用
-->
<mapper namespace="test">

    <!-- 在 映射文件中配置很多sql语句 -->
    <!-- 需求:通过id查询用户表的记录 -->
    <!-- 通过 select执行数据库查询
    id:标识 映射文件中的 sql
    将sql语句封装到mappedStatement对象中,所以将id称为statement的id
    parameterType:指定输入 参数的类型,这里指定int型 
    #{}表示一个占位符号
    #{id}:其中的id表示接收输入 的参数,参数名称就是id,如果输入 参数是简单类型,#{}中的参数名可以任意,可以value或其它名称

    resultType:指定sql输出结果 的所映射的java对象类型,select指定resultType表示将单条记录映射成的java对象。
     -->
    <select id="findUserById"  parameterType="int" resultType="com.zhb.mybatis.bean.User">
        SELECT * FROM  USER WHERE id = #{id}
    </select>
    <!-- 根据用户名称模糊查询用户信息,可能返回多条
    resultType:指定就是单条记录所映射的java对象 类型
    ${}:表示拼接sql串,将接收到参数的内容不加任何修饰拼接在sql中。
    使用${}拼接sql,引起 sql注入
    ${value}:接收输入 参数的内容,如果传入类型是简单类型,${}中只能使用value
     -->
     <select id="findUserByName" parameterType="java.lang.String" resultType="com.zhb.mybatis.bean.User">
        SELECT * FROM  USER WHERE username like #{username}
     </select>



</mapper>


6.程序编写
package com.zhb.mybatis.first;

import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
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.Test;

import com.zhb.mybatis.bean.User;



/**
 * 
* <p>Title: MybatisFirst</p>  
* <p>Description:入门程序 </p>  
* @author zhb  
* @date 2018年3月12日
 */
public class MybatisFirst {
    /**
     * 得到sqlsession
     * @throws IOException 
     */
    public SqlSession getSqlSession() throws IOException{
        // mybatis配置文件
        String resource = "SqlMapConfig.xml";
        // 得到配置文件流
        InputStream inputStream = Resources.getResourceAsStream(resource);
        //创建会话工厂;
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //根据工厂得到sqlsession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        return sqlSession;
    }


    /**
     * 根据用户id得到一条结果
     * @throws IOException 
     */
    @Test
    public void findUserByIdTest() throws IOException{
        SqlSession sqlSession = this.getSqlSession();
        //通过sqlsession操作数据库
        // 第一个参数:映射文件中statement的id,等于=namespace+"."+statement的id
        // 第二个参数:指定和映射文件中所匹配的parameterType类型的参数
        // sqlSession.selectOne结果 是与映射文件中所匹配的resultType类型的对象
        // selectOne查询出一条记录
        User user = sqlSession.selectOne("test.findUserById", 1);
        System.out.println(user);
        sqlSession.close();
    }

    /**
     * 根据用户姓名模糊查询
     * @throws IOException
     */
    @Test
    public void findUserByNameTest() throws IOException{
        SqlSession sqlSession = this.getSqlSession();
        List<User> list =  sqlSession.selectList("test.findUserByName","%小明%");
        System.out.println(list);
        sqlSession.close();

    }

    /**
     * 添加用户
     * @throws IOException
     */
    @Test
    public void addUserTest() throws IOException{
        SqlSession sqlSession = this.getSqlSession();
        User user = new User();
        user.setUsername("github");
        user.setAddress("11");
        user.setSex("1");
        user.setBirthday(new Date());
        sqlSession.insert("test.addUser",user);
        sqlSession.commit();
        sqlSession.close();

    }


}

注意: 我在获取mybatis配置文件时,一开始老是失败。报错如下:
这里写图片描述
需要将config文件夹加入Source Folder
这里写图片描述

7.新增时自增主键返回
<!-- 
        将插入数据的主键返回,返回到user对象中

        SELECT LAST_INSERT_ID():得到刚insert进去记录的主键值,只适用与自增主键

        keyProperty:将查询到主键值设置到parameterType指定的对象的哪个属性
        order:SELECT LAST_INSERT_ID()执行顺序,相对于insert语句来说它的执行顺序
        resultType:指定SELECT LAST_INSERT_ID()的结果类型
         -->
        <insert id="addUser" parameterType="com.zhb.mybatis.bean.User">
            <selectKey  order="AFTER" keyProperty="id" resultType="java.lang.Integer">
                SELECT LAST_INSERT_ID()
            </selectKey>
            insert into user(username,birthday,sex,address) value(#{username},#{birthday},#{sex},#{address})
        </insert>

总结

1.  parameterType
在映射文件中通过parameterType指定输入 参数的类型。
2.  resultType
在映射文件中通过resultType指定输出结果的类型。
3.  #{}和${}
#{}表示一个占位符号,#{}接收输入参数,类型可以是简单类型,pojo、hashmap。
如果接收简单类型,#{}中可以写成value或其它名称。
#{}接收pojo对象值,通过OGNL读取对象中的属性值,通过属性.属性.属性...的方式获取对象属性值。

${}表示一个拼接符号,会引用sql注入,所以不建议使用${}。
${}接收输入参数,类型可以是简单类型,pojo、hashmap。
如果接收简单类型,${}中只能写成value。
${}接收pojo对象值,通过OGNL读取对象中的属性值,通过属性.属性.属性...的方式获取对象属性值。

完整代码

代码下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值