主要写用法
引入依赖
<!--mybatis和MySQL依赖/坐标-->
<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.15</version>
</dependency>
编写配置文件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="mysql">
<!--配置MySQL环境-->
<environment id="mysql">
<!--配置事务类型-->
<transactionManager type="JDBC"/>
<!--配置数据源(连接池)-->
<dataSource type="POOLED">
<!--配置数据源的四个基本信息-->
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/myjdbc?serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!--指定映射配置文件位置 每个dao有一个独立配置文件-->
<mappers>
<mapper resource="com/company/dao/IUserDao.xml"></mapper>
</mappers>
</configuration>
对上面的进行改造
- properties标签
<properties>
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/myjdbc?serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</properties>
<environments default="mysql">
<!--配置MySQL环境-->
<environment id="mysql">
...
<dataSource type="POOLED">
<!--配置数据源的四个基本信息-->
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
用${}的方式加上properties中的name标签,可以代替之前,这样的话就可以将properties单独写一个文件便于管理:
jdbcConfig.properties
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/myjdbc?serverTimezone=UTC
username=root
password=root
然后在SqlMapConfig.xml配置:
<properties resource="jdbcConfig.properties"/>
映射配置文件IUserDao.xml配置:
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.company.dao.IUserDao">
<!--配置查询所有方法-->
<select id="findAll" resultType="com.company.domain.User">
select * from user</select>
<!--配置插入方法-->
<insert id="insert" parameterType="com.company.domain.User">
insert into user(name,studentID,type,date) values(#{name},#{studentID},#{type},#{date})
</insert>
<!--配置更新方法-->
<update id="updateUser" parameterType="com.company.domain.User">
update user set name=#{name},studentID=#{studentID},type=#{type},date=#{date} where name=#{name}
</update>
<!--配置删除方法-->
<delete id="delete" parameterType="String">
delete from user where name=#{name}
</delete>
<select id="count" resultType="int">
select count(id) from user
</select>
</mapper>
namespace=“com.company.dao.IUserDao” 表示接口全类名
id=“findAll” 方法名为findAll resultType=“com.company.domain.User” 返回值封装类型为User类对象 parameterType=“String” 表示参数类型为String
package com.company.dao;
import com.company.domain.User;
import java.util.List;
public interface IUserDao {
/**
* 查询所有操作
* @return
*/
List<User> findAll();
/**
* 插入一条学生信息
* @param user
*/
void insert(User user);
/**
* 更新
* @param user
*/
void updateUser(User user);
/**
* 根据姓名查找信息
* @param name
* @return
*/
List<User> find(String name);
/**
* 删除
* @param name
*/
void delete(String name);
/**
* 查找表行数
* @return
*/
int count();
}
- 配置文件要和类有相同的目录结构,就可以不写接口实现类,这里因为idea版本问题他把com/company/dao显示成了com.company.dao,不再是展开的目录
注解配置:
@select(“select * from user”)
/**
* 查询所有操作
* @return
*/
@Select("select * from user")
List<User> findAll();
同时在配置文件中
<mappers>
<mapper class="com.company.domain.User"></mapper>
</mappers>
测试方法:
//1.读取配置文件
//2.创建SQLSessionFactory工厂
//3.使用工厂创建sqlSession对象
//4.使用sqlSession创建dao代理对象
//5.使用代理对象执行方法
//6.释放资源
package com.company;
import com.company.dao.IUserDao;
import com.company.domain.User;
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.After;
import org.junit.Before;
import org.junit.Test;
import java.io.InputStream;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
public class CRUDTest {
private InputStream in;
private SqlSessionFactory sessionFactory;
private SqlSession sqlSession;
private IUserDao iUserDao;
/**
* 初始化方法
* @throws Exception
*/
@Before
public void init() throws Exception{
//1.读取配置文件
in = Resources.getResourceAsStream("SqlMapConfig");
//2.创建SQLSessionFactory工厂
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(in);
//3.使用工厂创建sqlSession对象
sqlSession = sessionFactory.openSession();
//4.使用sqlSession创建dao代理对象
iUserDao = sqlSession.getMapper(IUserDao.class);
}
/**
* 结束方法
* @throws Exception
*/
@After
public void destroy() throws Exception{
sqlSession.close();
in.close();
}
/**
* 查找全部
*/
@Test
public void findAll(){
List<User> l = iUserDao.findAll();
for(User u:l){
System.out.println(u);
}
}
/**
* 插入一条数据
*/
@Test
public void testInsert(){
User u = new User();
u.setName("王五");
u.setStudentID("220000234");
u.setType("java");
u.setDate(new Date());
iUserDao.insert(u);
//事务提交
//不提交mybatis将会回滚
sqlSession.commit();
}
/**
* 更新操作
*/
@Test
public void testUpdate(){
User u = new User();
u.setName("李四");
u.setStudentID("11111111");
u.setType("java");
u.setDate(Calendar.getInstance().getTime());
iUserDao.updateUser(u);
//事务提交
//不提交mybatis将会回滚
sqlSession.commit();
}
@Test
public void testDelete(){
String name="张三";
iUserDao.delete(name);
//事务提交
//不提交mybatis将会回滚
sqlSession.commit();
}
@Test
public void testCount(){
int n = iUserDao.count();
System.out.println(n);
}
}
实体类 与数据库字段保持一致
import java.io.Serializable;
import java.util.Date;
public class User implements Serializable {
Integer id;
String name;
String studentID;
String type;
Date date;
public void setId(Integer id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setStudentID(String studentID) {
this.studentID = studentID;
}
public void setType(String type) {
this.type = type;
}
public void setDate(Date date) {
this.date = date;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", studentID='" + studentID + '\'' +
", type='" + type + '\'' +
", date=" + date +
'}';
}
}
- 别名
使用typeAliases标签
使用type引用全类名,alias写它的别名,然后别名就可以代替原来,而且不区分大小写
<typeAliases>
<typeAlias type="com.company.domain.User" alias="User"></typeAlias>
</typeAliases>
用法:
在配置dao接口对应的配置文件 IUser.xml时resultType,parameterType,等标签就可以代替
还可以使用package标签,那么name标签下的包名下的全部设置别名,而且别名等于类名,不区分大小写。下面同样可以使用。
<typeAliases>
<!-- <typeAlias type="com.company.domain.User" alias="User"></typeAlias>-->
<package name="com.company.domain"/>
</typeAliases>
为了一个小项目练习,就先学这么多,其他有空再看吧