为什么使用Mybatis?
为了和数据库进行交互,通常的做法是将SQL语句写在Java代码中,SQL语句和Java代码耦合在一起不利于后期维护修改,而MyBatis能够帮助我们将SQL语句和Java代码分离,方便了后期因需求变动而对SQL语句进行修改。
jar包
其中:/mybatis/lib/mybatis-3.4.4.jar 下载地址http://www.mybatis.org/mybatis-3/
xml文件:
一、配置类
我们使用userinfo 类中的方法进行SQL语句:
<?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="club.shaoyu.userinfo.dao.IUserInfoDao">
<select id="getById" resultType="java.lang.String">
select name from user_info where id =#{id}
</select>
<select id="selectById" resultType="club.shaoyu.vo.UserInfo">
select id,name,mobile,address from user_info where id =#{id}
</select>
<select id="select" resultType="club.shaoyu.vo.UserInfo">
select id,name,mobile,address from user_info where name like #{name}
</select>
<delete id="delete">
delete from user_info where id=#{id}
</delete>
</mapper>
其中的标签<mapper>标签作用
namespace mapper下的语句是针对的哪一个类,由于模块化开发的原则:其中的userinfo中的访问数据库的类均放置在Dao层,我们为其建立相应的namespace对应的接口类,下面我们使用时其实使用的是实现类
其下标签<select>,作用为 id的值为方法名,resultType为返回值的类型,其中#{}防止SQL注入,${}不可以防止SQL注入
<delete> 作用是执行delete语句时使用
二、配置环境
(1)配置数据库
<environments >中的default 的配置是-->指定下面配置的环境池<environment id="dev">其中id对应的就是前面的default
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://127.0.0.1:3306/userinfo" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
其中transactionManager表示驱动方式JDBC,配置MySQL 的账号密码驱动等
(2)连接相应的mapper
<mappers>
<mapper resource="user_info.xml"/>
</mappers>
(3)查看UserInfoDao层方法
package club.shaoyu.userinfo.dao;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import club.shaoyu.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);
}
其中@Param(“###”)可以让(2)中的方法{ 只能输入和参数名}
(4)test测试
InputStream inputStream =Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session=sqlSessionFactory.openSession();//设置提交事务
数据库连接设置
一、输入流对象设置 二、建立SQL会话连接 三、建立一次会话
IUserInfoDao dao= session.getMapper(IUserInfoDao.class);
通过session获取Mapper中的对象
(5)调用方法测试(select方法)
System.out.println(dao.selectById(8));
System.out.println(dao.getById(8));
List<UserInfo> list=dao.select("%S%");
for (UserInfo userInfo : list) {
System.out.println(userInfo);
}
注:此时的返回值为一个对象时,特别注意的是使用select的方法是要将Java中的属性名一定是数据库搜索出的数据(可以在sql语句中用As改变搜索名字)
(6)调试方法(delete方法)
此时注意的是我们上面测试的方法中sqlSessionFactory.openSession()中默认的方法是不会自动提交事务
System.out.println(dao.delete(1));
session.commit();
session.close();
注:此时的delete方法,返回的值可以是两个,其中true或者false;其次是返回受影响行数