Mybatis项目搭建 流程
导入 Mybatis jar包
配置mybatis 配置文件 写好配置源
构建对应的sql语句文件 对应好 相对的接口
构建SqlSession 对象api执行
MyBatis 的框架构成
实体类 JavaBean 封装数据
sql定义文件 用来定义sql的文件
主配置文件 用来定义数据库信息 以及 加载sql 定义文件的xml
框架api 主要是mabatis.jar中的 SqlSession 对象来执行对应的操作
按照规则来定义Dao 接口 以及 sql文件来
接口方法名称对应sql配置文件中的ID
接口方法的返回值 对应sql文件中 resultType 返回单个值保持一致 多个对象需要加List Dml操作可 以是void 可以是 int
接口方法的参数 和 parameterType 保持一致 如果没有parameterType 则参数任意
SQL 定义文件中的namespace 和 包名.接口名 一致
构建mybatis配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
<configuration>
<environments default="environment">
<environment id="environment">
<transactionManager type="JDBC" />
//配置数据源
<dataSource type="POOLED">
<property name="driver"
value="com.mysql.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://localhost:3306/test"/>
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
//对应的sql文件路径
<mappers>
<mapper resource="com/liheng/dao/bank.xml" />
</mappers>
</configuration>
Dao接口以及 对应的sqlXml文件
Dao接口
public interface UserDao {
//查询单个对象
User findByid(int id);
//查询所有对象
List<User> findAll();
//根据多个参数查询对象 通过@Param 来定义 sql文件中查询的名称 也可以是 0 1 可以可以是 para1 para2
User findUserbypassAndname(@Param("name")String name ,@Param("password")String pass);
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"
"http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
<!-- namespace指定和哪个Mapper映射器接口对应 -->
<mapper namespace="com.liheng.dao.UserDao">
<!-- 定义SQL语句 -->
<select id="findByid" parameterType="int" resultType="com.liheng.bean.User">
select * from bank where id= #{id}
</select>
<select id="findAll" resultType="com.liheng.bean.User">
select * from bank
</select>
<select id="findUserbypassAndname" resultMap="map">
select * from bank where name = #{name} and password=#{password}
</select>
<resultMap type="com.liheng.bean.User" id="map">
<result column="password" property="pass"/>
</resultMap>
</mapper>
创建sqlsession对象来执行对应的操作
sql.getMapper(UserDao.class); 当前方法自动构建实现类对象无需再实现Dao对应的实现类
public class Util {
public static SqlSession ret(){
//创建SqlSessionFactoryBuilder 来创建 SqlSessionFactory
SqlSessionFactoryBuilder fb = new SqlSessionFactoryBuilder();
//根据SqlSessionFactory 工程对象得到配置文件信息 得到 SqlSession 对象 就可以执行 对应的api
InputStream is = Util.class.getClassLoader().getResourceAsStream("sqlmap-config.xml");
SqlSessionFactory ses = fb.build(is);
SqlSession sql = ses.openSession();
return sql;
}
}
参数是多个参数的解决方法
使用Map对象来装入参数 sql查询语句中 参数名称对应 Map中的key
java类
User findUserbypassAndname1(Map<String,String> map);
SQL查询文件
<select id="findUserbypassAndname1" parameterType="map" resultType="com.liheng.bean.User">
select * from bank where name = #{name} and password=#{password}
</select>
通过传入对象 来获取值 sql查询语句中 参数名称对应 对象中的参数名称
Java类
User findUserbypassAndname2(User user);
sql查询文件
<select id="findUserbypassAndname1" parameterType="map" resultType="com.liheng.bean.User">
select * from bank where name = #{name} and password=#{password}
</select>
不需要写传入参数的类型 直接使用 @para(“参数名称”) 来定义 或者 在 sql文件中 使用 0或者1 或者 #{para1} # {para2}
实体类对象参数与数据库不匹配解决方法
无需定义 返回值 定义 resultMap
在resultMap 中写好对应返回的 类型 以及定义不一样的名称
column 对应的 数据库字段
property 对应实体类的名称
<select id="findUserbypassAndname" resultMap="map">
select * from bank where name = #{name} and password=#{password}
</select>
<resultMap type="com.liheng.bean.User" id="map">
<result column="password" property="pass"/>
</resultMap>