MyBatis小白入门

沿用上文Spring中的小项目

一 配置文件和连接数据库

添加依赖 mysql 和 mybatis

<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.30</version>
</dependency>
<!--mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.10</version>
</dependency>

 核心配置类:resource中新建mybatis-config.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>
        <typeAliases>
            <package name="org.example.model"/>
        </typeAliases>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/test1"/>
                <property name="username" value="root"/>
                <property name="password" value="666666"/>
            </dataSource>
        </environment>
    </environments>
        <mappers>
            <mapper resource="mybatis/EmployeeMapper.xml"/>
        </mappers>
</configuration>

 新增一个model文件夹,映射的主体类;准备好数据库表;

按数据库需求写出对应属性,并生成构造函数,toString get set方法

public class Employee {
    private Integer id;
    private String name;
    private String gender;
    private Date birthday;
//.....................
}

 新建dao和一个新的Java类Mapper,类型为interface

 

package org.example.dao;

import org.example.model.Employee;

public interface EmployeeMapper {
    Employee selectEmployeeById(Integer id);
}

 在resource下创建Mapper的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">
<mapper namespace="org.example.dao.EmployeeMapper">
    <select id="selectEmployeeById" parameterType="int" resultType="org.example.model.Employee">
        SELECT *
        FROM employee
        WHERE id = #{id}
    </select>
</mapper>

配置完毕,创建一个MybatisDemo,用来运行

package org.example.demos;

import org.example.dao.EmployeeMapper;
import org.example.model.Employee;
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 java.io.IOException;
import java.io.InputStream;

public class MybatisDemo {
    public static void main(String[] args) throws IOException {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();

        EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);
        Employee employee = mapper.selectEmployeeById(1);
        
        System.out.println(employee);
    }
}

 运行成功

 

 二 Mybatis和spring集成

核心就是 spring框架接管mybatis框架中核心对象的创建(SqlSessionFactory)。

1.配置 

引入依赖(链接池减小性能压力)

<!--mybatisspring&druid-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.0.7.RELEASE</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.12</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.7</version>
</dependency>

beans.xml新增

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/test1?allowPublicKeyRetrieval=true"/>
        <property name="username" value="root"/>
        <property name="password" value="666666"/>
    </bean>
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="mapperLocations" >
            <array>
                <value>mybatis/EmployeeMapper.xml</value>
            </array>
        </property>
    </bean>

    <bean id="employeeMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
        <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
        <property name="mapperInterface" value="org.example.dao.EmployeeMapper"/>
    </bean>

上个部分其实以及写出来了查的操作,下面是增删改查全操作,

 Mapp.xml里新增删改查的SQL语句

<insert id="insertEmployee">
        INSERT INTO test1.employee
            (name, gender, birthday)
        VALUES (#{name}, #{gender}, #{birthday});
    </insert>

    <update id="updateEmployeeById">
      UPDATE employee
      SET name = #{name}
      WHERE id = #{id}

    </update>

    <delete id="deleteEmployeeById">
       DELETE
       FROM employee
       WHERE id = #{id}

    </delete>

Mapper里新增三个增改查方法

package org.example.dao;

import org.example.model.Employee;

public interface EmployeeMapper {
    Employee selectEmployeeById(Integer id);
    int insertEmployee(Employee employee);
    int updateEmployeeById(Employee employee);
    int deleteEmployeeById(Employee employee);
}

2.简单增删改

最后app里准备运行,增操作

        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        EmployeeMapper employeeMapper = (EmployeeMapper) context.getBean("employeeMapper");
//        Employee employee = employeeMapper.selectEmployeeById(1);

        //CURD
        Employee employee1 = new Employee("Tom","男",new Date());
        int res = employeeMapper.insertEmployee(employee1);
        System.out.println(res);

        System.out.println(employee1);

运行成功

 运行改操作

        Employee employee2 = new Employee(11,"Tom","男",new Date());
        int res2 = employeeMapper.updateEmployeeById(employee2);
        System.out.println(res2);

        System.out.println(employee2);

 成功11的张三改成Tom(13位置那个Tom忽略,搞错了,刚好下一步删掉操作)

按ID删操作

        Employee employee2 = new Employee(13);
        int res2 = employeeMapper.deleteEmployeeById(employee2);
        System.out.println(res2);

 3.增删改查进阶

不按照ID进行添加

新增一种无生日增

     <insert id="insertEmployeeV2">
        INSERT INTO test1.employee
            (name, gender)
        VALUES (#{name}, #{gender});
    </insert>

 对应的方法      1.1

int insertEmployeeV2(String name,String gender);

准备添加一个运行一下

        int res = employeeMapper.insertEmployeeV2("Alex","男");
        System.out.println(res);

结果一定会报错

因为MyBatis不认识上面那个 1.1 里的参数,应该改成

int insertEmployeeV2(@Param("name") String name,@Param("g") String gender);

为什么最后gender改成了g呢,因为是什么无所谓,它不管是什么,

都代表后面的东西

所以前面Mapper.xml里代码改成

    <insert id="insertEmployeeV2">
        INSERT INTO test1.employee
            (name, gender)
        VALUES (#{name}, #{g});
    </insert>

最后再次运行,成功

 再换一种

分别是这样

int insertEmployeeV3(@Param("e") Employee employee);

和这样,加个 e. 前缀

     <insert id="insertEmployeeV3">
        INSERT INTO test1.employee
            (name, gender, birthday)
        VALUES (#{e.name}, #{e.gender}, #{e.birthday});
    </insert>

运行一下

        Employee employee1 = new Employee("BlackGirl","女",new Date());
        int res = employeeMapper.insertEmployeeV3(employee1);
        System.out.println(res);

 自增id

添加后面即可

<insert id="insertEmployeeV2" useGeneratedKeys="true" keyProperty="id">

修改参数名

比如现在要求将类里的name改为username,

public class Employee {
    private Integer id;
    private String username;
    private String gender;
    private Date birthday;
//..................
}

那么在Mapper.xml中添加resultMap即可

<resultMap id="employeeMap" type="org.example.model.Employee">
        <id column="id" property="id"></id>
        <result column="name" property="userName"></result>
        <result column="gender" property="gender"></result>
        <result column="birthday" property="birthday"></result>
    </resultMap>

或者在要使用的sql里加as

<select id="selectEmployeeById" parameterType="int" resultType="org.example.model.Employee">
        SELECT id,name as username,gender,birthday
        FROM employee
        WHERE id = #{id}
    </select>

小知识

这里用 #{  }  ,那么输出就是带双引号的,如果用 ${  } 那本来是什么就是什么

WHERE id = #{id}

三 动态SQL

待更新。。。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值