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

MyBatis框架的搭建

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

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

各配置文件和源文件存放的位置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();

    }
}

测试结果:
在这里插入图片描述

原创文章 3 获赞 2 访问量 50

猜你喜欢

转载自blog.csdn.net/weixin_42977223/article/details/105975909