欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用MyBatis连接数据库,并完成各种数据操作

程序员文章站 2022-07-12 22:39:35
...

MyBatis框架的搭建

关于MyBatis的配置文件xml一些问题

有许多博客中说,xml的文件名要与对应的接口名要一致,其实并不是这样的,对应的xml文件和接口文件的文件名称未必要相同,我就将mapper配置文件名改为AccountRepository1.xml,接口名为AccountRepository.java 。resources文件夹下存放总的config.xml 各个其他配置文件是要以 的形式配置在其中。每个配置文件里需要填写一个namespace的全包名+文件名,这个文件名必须是接口文件名!

使用MyBatis连接数据库,并完成各种数据操作pom.xml 是用来添加依赖项的,其中主要包括mybatis框架,MySQL的连接以及lombok.还有一个是根据自己文件放置的喜好不同,添加资源路径说明,可以读取java文件夹下的所有xml文件。
pom.xml 配置

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.yanghao</groupId>
    <artifactId>aimybatis</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.5</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.11</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.12</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
//设置为能读取java文件下的所有xml
    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
        </resources>
    </build>

</project>

接着是在resources文件夹下创建总的配置文件config.xml,其他的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>
    <!-- 配置MyBatis运⾏环境 -->
    <environments default="development">
        <environment id="development">
            <!-- 配置JDBC事务管理 -->
            <transactionManager type="JDBC"></transactionManager>
            <!-- POOLED配置JDBC数据源连接池 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"></property>
                <property name="url"
                          value="jdbc:mysql://localhost:3306/test?useSSL=false&amp;
useUnicode=true&amp;characterEncoding=UTF-8"></property>
                <property name="username" value="root"></property>
                <property name="password" value="******"></property>
            </dataSource>
        </environment>
    </environments>

    <mappers>
    <!-- 所有的mapper配置文件都要在此处注册 -->
        <mapper resource="com/yangHao/mapper/AccountMapper.xml"></mapper>
        <mapper resource="com/yangHao/repository/AccountRepository1.xml"></mapper>
    </mappers>
</configuration>

接着要对照这数据里的表的字段创建实体类Account.java

package com.yangHao.entity;

import lombok.*;

@Data
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
public class Account {
    private  int id;
    private String username;
    protected String password;
    private int age;
}

然后创建用于数据库各种操作的接口类AccountRepository。

package com.yangHao.repository;

import com.yangHao.entity.Account;
import java.util.List;

public interface AccountRepository {
    //定义接口方法
    public int save(Account account);
    public int update(Account account);
    public int deleteById(long id);
    public List<Account> findAll();
    public Account findById(long id);
    public Account findByName(String str);
    public Account findByNameAndAge(String name,int age);
    public int count();
    public String  findNameById(int id);
}

创建配置文件,完成映射,也就是,在配置文件中设置标签,来完成相应的数据库操作,标签名当做是接口中的函数名。这里就是很多人有疑惑的地方了,有博客说这个文件名必须与接口名一致,其实不是的,接口名是啥其实没有要求,让它一致只是为了方便程序员识别。namespace=“com.yangHao.repository.AccountRepository” namespace里写清楚接口的全名称就行。然后将AccountRepository1.xml在config.xml中注册即可。

     <!--AccountRepository1.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="com.yangHao.repository.AccountRepository">
    <insert id="save" parameterType="com.yangHao.entity.Account">
         insert into t_account(username,password,age) values(#{username},#{password},#{age})
    </insert>
    <update id="update" parameterType="com.yangHao.entity.Account">
        update t_account set username = #{username},password = #{password},age
        = #{age} where id = #{id}
    </update>
    <delete id="deleteById" parameterType="long">
        delete from t_account where id = #{id}
    </delete>
    <select id="findAll" resultType="com.yangHao.entity.Account">
        select * from t_account
    </select>
    <select id="findById" parameterType="long"
            resultType="com.yangHao.entity.Account">
        select * from t_account where id = #{id}
    </select>
    <select id="findByName" parameterType="java.lang.String"
            resultType="com.yangHao.entity.Account">
        select *from t_account where username = #{randname}
    </select>
    <select id="findByNameAndAge" resultType="com.yangHao.entity.Account">
        <!-- param1 param2 是固定的参数位置,低版本是param0 开始-->
        select *from t_account where username = #{param1} and age = #{param2}
    </select>
    <select id="count" resultType="int">
        select count(id) from t_account;
    </select>
    <select id="findNameById" parameterType="int"  resultType="String">
        select username from t_account where id = #{id}
    </select>
</mapper>

最后就是写main进行测试了。

package com.yangHao.test;

import com.yangHao.entity.Account;
import com.yangHao.repository.AccountRepository;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.InputStream;

public class Test2 {
    public static void main(String[] args) {
        InputStream inputStream =
                Test.class.getClassLoader().getResourceAsStream("config.xml");
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new
                SqlSessionFactoryBuilder();
        SqlSessionFactory sqlSessionFactory =
                sqlSessionFactoryBuilder.build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //获取实现接⼝的代理对象
        AccountRepository accountRepository =
                sqlSession.getMapper(AccountRepository.class);
        //根据id删除成员
       /* int result = accountRepository.deleteById(4L);*/
        //修改数据。
       /* Account account = new Account(7,"小杨","231222",20);
        int result= accountRepository.update(account);*/
        //添加数据,id是几并不影响它添加在末尾
        /*Account account = new Account(6,"小金","239022",24);
        int result= accountRepository.save(account);*/
        //查询全部
       /* List<Account> list = accountRepository.findAll();
        for (Account account : list) {
            System.out.println(account);
        }*/
       //先查找出来,再对指定的内容进行修改
      /* Account account = accountRepository.findById(2);
       account.setUsername("周杰伦");
       account.setPassword("952731");
       account.setAge(35);
       int result = accountRepository.update(account);*/
      // Account account = accountRepository.findByName("周杰伦");

        System.out.println(accountRepository.findByNameAndAge("周杰伦",35));
        System.out.println(accountRepository.count());
        System.out.println(accountRepository.findNameById(7));

        sqlSession.commit();
        sqlSession.close();

    }
}

测试结果:
使用MyBatis连接数据库,并完成各种数据操作