使用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&
useUnicode=true&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全部标签
推荐阅读
-
python中常用的各种数据库操作模块和连接实例
-
Python 使用Python远程连接并操作InfluxDB数据库
-
php使用pdo连接并查询sql数据库的方法
-
使用JDBC,完成数据库批量添加数据操作:
-
Python使用Flask-SQLAlchemy连接数据库操作示例
-
Heidisql如何连接sql server数据库并做增删改操作?
-
PHP使用pdo连接access数据库并循环显示数据操作示例
-
深入探讨:PHP使用数据库永久连接方式操作MySQL的是与非
-
python使用mysqldb连接数据库操作方法示例详解
-
【⭐】Java—Spring-—数据库操作—使用内置连接池,报读取不到驱动错误。Could not load JDBC driver class。