一、为什么使用MyBatis
为了和数据库进行交互,通常的做法是将SQL语句写在Java代码中,SQL语句和Java代码耦合在一起不利于后期维护修改,而MyBatis能够帮助我们将SQL语句和Java代码分离,方便了后期因需求变动而对SQL语句进行修改。
二、搭建MyBatis
(1)准备
- 创建Java工程,新建文件夹lib中导入mybatis-3.4.4.jar和mysql-connector-java-5.1.44-bin.jar(数据库驱动包),并Build Path
- 数据库创建user_info表含id,name,mobile,address;并存入相应数据
(2)使用
- 如图,创建包和相应xml文件
2. 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>
<environments default="dev">
<!-- 配置数据库连接信息 -->
<environment id="dev">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://127.0.0.1:3306/mmnn" />
<property name="username" value="root" />
<property name="password" value="lcn61" />
</dataSource>
</environment>
</environments>
<!-- 将含有sql语句的Mapper xml文件进行注册 -->
<mappers>
<mapper resource="user_info.xml" />
</mappers>
</configuration>
3.UserInfo.java
package com.jd.vo;
public class UserInfo {
private int id;
private String name;
private String mobile;
private String address;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String toString() {
return "UserInfo [id=" + id + ", name=" + name + ", mobile=" + mobile + ", address=" + address + "]";
}
}
4.接口IUserInfoDao.java
package com.jd.userInfo.dao;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.jd.vo.UserInfo;
public interface IUserInfoDao {
String getById(@Param("id")int id);
UserInfo selectById(@Param("id")int id);
List<UserInfo> select(@Param("name")String name);
boolean delete(@Param("id")int id);//添加、修改、删除,方法为boolean,则操作成功true,否则false; int类型,返回受影响行数
}
5.user_info.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">
<!-- namespace:不同Mapper文件前namespace值不一样 -->
<mapper namespace="com.jd.userInfo.dao.IUserInfoDao">
<!-- 同一个Mapper文件中id值不允许重复 -->
<select id="getById" resultType="java.lang.String">
select name from user_info where id = #{id}
</select>
<select id="selectById" resultType="com.jd.vo.UserInfo">
select id,name,mobile,address from user_info where id = #{id}
</select>
<select id="select" resultType="com.jd.vo.UserInfo">
select id,name,mobile,address from user_info where name like #{name}
</select>
<!-- #{}可以有效防止sql注入 ;${}无法回避sql注入-->
<delete id="delete">
delete from user_info where id = #{id}
</delete>
</mapper>
6.测试类Test.java
package com.jd.test;
import java.io.IOException;
import java.io.InputStream;
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 com.jd.userInfo.dao.IUserInfoDao;
import com.jd.vo.UserInfo;
public class Test {
public static void main(String[] args){
try {
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();//SqlSession对象表示一次数据库访问;无参,则默认不自动提交事务false, true时自动提交事务
IUserInfoDao userInfoDao = sqlSession.getMapper(IUserInfoDao.class);
String name = userInfoDao.getById(1);
System.out.println(name);
UserInfo userInfo = userInfoDao.selectById(1);
System.out.println(userInfo);
System.out.println("_______________________");
for(UserInfo ui:userInfoDao.select("%k%")) {
System.out.println(ui);
}
/*System.out.println(userInfoDao.delete(1));
sqlSession.commit();*/
sqlSession.close();
} catch(IOException e){
e.printStackTrace();
}
}
}
结果java application