mybatis的配置与简单使用
Day51
mybatis的配置与简单使用
1,mybatis的配置
首先添加mybatis的依赖
配置步骤:
1.将类路径下的xml文件以输入流形式读入到程序中:
Inputstream is=Resources.getResourceAsStream("mybatis.xml");
2.创建SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
3.创建SqlSessionFactory对象:创建mybatis实例的核心
SqlSessionFactory factory=builder.build();
4.配置文件:核心配置文件 mybatis.xml
--数据源
--管理映射元文件
mybatis.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="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="驱动类"/> <property name="url" value="连接串信息"/> <property name="username" value="用户名"/> <property name="password" value="密码"/> </dataSource> </environment> </environments> <mappers> <mapper resource="从resources路径下读取到的映射元文件的路径"/> 例: mapper/UserMapper.xml </mappers> </configuration>
5.配置文件:映射元文件 **Mapper.xml,例:GoodsMapper.xml
—resources/mapper目录/ **Mapper.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="org.mybatis.example.BlogMapper"> <select id="selectBlog" resultType="Blog"> select * from Blog where id = #{id} </select> </mapper>
2,使用:
与接口的结合
应用:
dao层的接口: com.jlf.dao.UserMapper接口
抽象方法: int insert(); int update(); int delete(); List<User> select();
使用mybatis代替dao层的实现类
弃用===
实现接口中抽象方法的方法重写: jdbc的步聚;
弃用===
使用UserMapper.xml代替dao层的实现类
mybatis框架依据UserMapper.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="dao接口的全类名(包名+类名)"> <select id="方法名" resultType="Blog"> select * from Blog where id = #{id} </select> <insert id="方法名insert"> sql语句 </insert> <delete id="方法名"> sql语句 </delete> <update id="方法名"> sql语句 </update> </mapper> 注:名空间: namespace----与对应接口全类名称一致; id值: id----与接口中方法名相同
3,执行
SqlSession: 会话对象
Sqlsession sqlSession = sqlSessionFactory.openSession();
获取接口对象: 通过mybatis实例获取
UserMapper userMapper=sqlSession.getMapper(Class接口类对象); //UserDao userDao=new UserDaoImpl()
执行接口中的方法:
int res=userMapper.insert();//插入一条数据 1/0(成功/失败)
提交:
sqlSession.commit();
4,参数的传递方式
语法:
<insert> insert into tb_user values (null,#{参数名},#{参数名},#{参数名}) </insert>
1,序号传参
arg0,arg1,arg2....
param1,param2,param3.....
接口:
public interface UserMapper{
int insert(String name,String pass,String tel,String mail);
}
映射元文件:xml文件
<insert id="insert方法名">
insert into tb_user values(null,#{arg0},#{arg1},#{arg2},#{arg3})
</insert>
<insert id="insert方法名">
insert into tb_user values(null,#{param1},#{param2},#{param3},#{param4})
</insert>
注:不能混用两种序号;必须从起始序号开始顺序递增;必须与接口中的参数一一对应;
2,实体传参
用实体类的属性名作为参数名;
实体类:
public class User{
//属性,例:name--u_name
private String name;
private String tel;
private String mail;
private String pass;
//无参构造
//全参构造
//get与set方法
}
接口:
public interface UserMapper{
int insert(User user);
}
映射元文件:xml文件
<insert id="insert方法名" parameterType="com.qf.pojo.User">
insert into tb_user values(null,#{name},#{pass},#{tel},#{mail})
</insert>
5,查询
对于查询结果的封装:
resultType = “实体类”
查询结果的字段名必须与实体类的属性名相同: select u_id ,u_name ,u_pass from tb_user; public class User{ private Integer uid; private String uname; private String upass; } 如果查询结构与定义的属性不一致,可以通过起别名的方式来让其保持一致 可通过字段别名的方式将结果集的字段名与实体类的属性名定义一致; select u_id uid ,u_name uname,u_pass upass from tb_user;
比如:
<select id="方法名" resultType/resultMap> select。。。语句 </select>
junit单元测试
1,添加依赖:pox.xml
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
2,添加注解
公共类/公共方法/无参/无返回值
public class 类{
@Test//单元测试方法
public void test(){
//方法体
}
@After//执行完单元测试后要执行的方法
public void after(){
//执行完单元测试后要执行的方法体
}
@Before//执行单元测试前要执行的方法
public void before(){
//执行单元测试前要执行的方法体
}
}
可以单独使用单元测试 : run as java application/ run junit单元测试