MyBatis:对象关系映射框架
jdbc,hibernate,MyBatis的区别
jdbc | 纯数据库连接,数据库操作效率最高(最快)开发效率低 |
hibernate | orm(对象关系映射)开发效率高,数据库操作效率低(不灵活) |
MyBatis | orm(对象关系映射) 开发效率比hibernate低,比jdbc高。数据库操作效率比hibernate高,和jdbc接近。灵活性高,sql语句自己写 |
下面就是创建一个简单的mybatis的项目
在IntelliJ IDEA 2019中导入mybatis
我的项目结构
1,在maven项目中pom.xml中导入mybatis框架,和mysql数据库
https://mvnrepository.com/tags/request 在这个网址下载
<!-- 导入mybatis架包-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!--导入mysql架包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.43</version>
</dependency>
2.创建java文件夹,resource文件夹,test文件夹,以上三个文件都要设置文件类型
java设置 右键java文件夹 ----- 找到Mark Driectory as ------ 选择里面的Sources Root
resource设置 右键resource文件夹 ----- 找到Mark Driectory as ------ 选择里面的Resources root
test设置 右键test文件夹 ---- 找到Mark Driectory as ------ 选择里面的Test Sources Root
上面一步一定要设置
3.第二步操作完后,文件夹会变颜色,然后根据下面图片中创建文件
com.ywy.entity的包中还是写实体类,和映射类
com.ywy.dao中写实体类对应的dao
resource中写配置文件
com.ywy.test写测试的
MyBatis的配置文件 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="com.ywy.entity"/>
</typeAliases>
<!--是mysql的-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test?characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!--导入实体类配置文件-->
<mappers>
<mapper resource="com/ywy/entity/User.xml"/>
</mappers>
</configuration>
UserDao接口中
package com.ywy.dao;
import com.ywy.entity.User;
import java.util.List;
public interface UserDao {
public List<User> findAllUser();
public void addUser(User user);
public User findUserId(int id);
public void updateUser(User user);
public void deleteUser(int id);
}
实体类的配置文件–User.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.ywy.dao.UserDao"><!--namespace实现的接口-->
<!--id名一定要和接口中的方法一样 resultType:返回类型 paranmeterType:参数-->
<!--resultType:直接写了吗是因为在mybatis-config.xml中取了别名 如果没有去别名,就需要包名加类名-->
<select id="findAllUser" resultType="User">
select * from user;
</select>
<select id="findUserId" resultType="User">
select * from user where uid=#{uid};
</select>
<insert id="addUser" parameterType="User">
insert into user values(null,#{uname},#{pass});
</insert>
<update id="updateUser" parameterType="User">
update user set uname=#{uname},pass=#{pass} where uid=#{uid};
</update>
<delete id="deleteUser" parameterType="int">
delete from user where uid=#{uid};
</delete>
</mapper>
在pom.xml中加入一段代码,不然不会加载java中的xml文件
<!--解决java目录下xml文件不编译的问题-->
<build>
<finalName>MyBatis_01</finalName>
<!--在finalName的下面加-->
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
测试包中的测试类TestCRUD中
package com.ywy.test;
import com.ywy.dao.UserDao;
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;
public class TestURCD {
public SqlSession session;
//增删改查测试
//在什么之前执行
@Before
public void before() {
//获取SqlSession工厂
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(getClass().getClassLoader().getResourceAsStream("mybatis-config.xml"));
//获取SqlSession对象
session = factory.openSession();
}
@Test
public void testAdd() {
//查询全部
UserDao ud = session.getMapper(UserDao.class);
List<User> list=ud.findAllUser();
System.out.println(list);
//新增
/*User u=new User("xxx","123");
ud.addUser(u);*/
//查询单个
/*User u=ud.findUserId(2);
System.out.println(u);*/
//修改
/*User u=new User("xxx","123");
u.setUid(4);
ud.updateUser(u);*/
//删除
ud.deleteUser(4);
}
@After
public void after() {
//在什么之后
session.commit();
session.close();
}
然后就可以直接在test的类中右键运行