如果文章有误,请各位楼下评论,感谢各位积极修正! 一起学习,成为大佬!
mybatis:
1.轻量级
2.高级映射(实体类与数据库表字段的映射) 这样就可以后续开发中去操作实体类而不需要去关注数据库,(但其实已经做了一遍实体类与数据库字段的对应关系)
3.mybatis中 dao层为接口.不需要写实现类,实现的方式交付给xml或注解
4.mybatis所需依赖的jar
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.0</version>
</dependency>
<!-- mysql 连接数据库 java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.15</version>
</dependency>
知识兔- 注意:映射xml文件的路径需要与接口对应上
第一章 记录xml方式
需要两个xml文件
主配置文件:mybatis-config.xml
映射文件:user.xml
xml文件头部
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
mybatis-config.xml
user.xml
<!--
resultMap 主要作用是让实体类与数据库表中字段名映射上
如果实体类与数据库中字段名在不区分大小写的情况下相同的话,那就不需要配置resultMap,因为mysql数据库不区分大小写,所以可以
直接映射上
但是如果实体类与数据库中字段名不相同的话,我们可以由三个解决方案
1. 直接修改数据库字段名,使之与实体类对应上
2. 在程序中配置文件中对sql语句改造,起别名,使之与实体类映射上 (直接操作sql语句效率更高)
如: select gender as usergender,age as userage from user;
3. 写配置文件 resultMap,使之映射上,但是需要修改resultType="com.mybatis.entry.User" 为 resultMap="userMap" (方便)
-->
<resultMap id="userMap" type="com.mybatis.entry.User">
<!--首先配置主键对应-->
<id column="uid" property="userUid"></id>
<!--其他属性配置-->
<result column="username" property="userName"></result>
<result column="gender" property="userGender"></result>
<result column="age" property="userAge"></result>
</resultMap>
<!--获得所有用户列表-->
<!--<select id="getUsers" resultMap="userMap">-->
<select id="getUsers" resultType="com.mybatis.entry.User">
select * from user
</select>
<!--添加一条信息-->
<insert id="saveUser" parameterType="com.mybatis.entry.User">
<!--配置插入操作后,获取插入数据的id
keyProperty: 指定返回的id映射到bean中的哪个属性
keyColumn: 插入数据以后,要返回的内容在数据表中对应的字段名称
order AFTER :表示这个selectKey语句的执行是在insert语句之后
-->
<selectKey keyProperty="uid" keyColumn="uid" order="AFTER" resultType="INT">
select last_insert_id();
</selectKey>
insert into user(username,gender,age) values (#{userName},#{gender},#{age})
</insert>
<!--删除一条信息-->
<delete id="deleteUser" parameterType="java.lang.Integer">
delete from user where uid=#{uid}
</delete>
<!--更新一条信息-->
<update id="updateUser" parameterType="com.mybatis.entry.User">
update user set username=#{userName},gender=#{gender},age=#{age} where uid=#{uid}
</update>
<!--
模糊查询:模糊查询的时候可以使用一个字段作为占位符,然后再测试类或者被调用的时候加上百分号
-->
<!--<select id="getUsers" resultMap="userMap">-->
<select id="findByName" parameterType="java.lang.String" resultType="com.mybatis.entry.User">
select * from user where username like #{name}
</select>
<!--查询总条数-->
<select id="findTotal" resultType="INT">
SELECT COUNT(1) FROM USER
</select>
<!--根据多个对象查询,需要将实体类以及其他属性再封装一层成为新的实体类-->
<!--<select id="getUsers" resultMap="userMap">-->
<select id="findByVo" resultType="com.mybatis.entry.User" parameterType="com.mybatis.entry.Vo">
select * from user where username=#{user.userName} and gender=#{user.gender}
</select>
知识兔接口
public interface IUseDao
{
/**
* 查询所有用户
* @return
*/
public List
/**
* 添加用户
* @return
*/
public boolean saveUser(User user);
/**
* 删除用户
* @return
*/
public void deleteUser(int uid);
/**
*修改用户
*/
public void updateUser(User user);
/**
* 模糊查询
* @param username
* @return
*/
public List<User> findByName(String username);
/**
* 查询总记录条数
* @return
*/
public int findTotal();
/**
* 根据新封装的实体类去查询(多条件查询)
* @param vo 将多个条件封装成一个实体类
* @return
*/
public List<User> findByVo(Vo vo);
知识兔}
测试类
public class mybatisTest {
private InputStream inputStream=null;
private SqlSession sqlSession=null;
private IUseDao userDao=null;
private SqlSessionFactory sessionFactory=null;
@Before
public void init() throws Exception
{
inputStream=Resources.getResourceAsStream("mybatis-config.xml");
sessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
sqlSession=sessionFactory.openSession();
userDao=sqlSession.getMapper(IUseDao.class);
}
@After
public void destroy() throws Exception
{
sqlSession.commit();
sqlSession.close();
inputStream.close();
}
@Test
public void testFindAll() throws Exception {
List<User> list=userDao.getUsers();
for (User user:list) {
System.out.println(user);
}
}
知识兔@Test
public void testSaveUser() throws Exception{
User user=new User();
user.setUserName("xxx");
user.setAge(20);
user.setGender("男");
/获取保存前的id/
System.out.println(user.getUid());
userDao.saveUser(user);
/*获取保存后的id*/
System.out.println(user.getUid());
}
@Test
知识兔public void testDeleteUser() throws Exception
{
int uid=3;
userDao.deleteUser(uid);
}
@Test
public void testUpdateUser() throws Exception{
User user=new User();
user.setUid(5);
user.setUserName("test");
user.setAge(20);
user.setGender("男");
userDao.updateUser(user);
}
@Test
public void testFindByName() throws Exception{
List<User> users = userDao.findByName("%x%");
for (User user:users)
{
System.out.println(user);
}
}
@Test
public void testFindTotal() throws Exception{
int total = userDao.findTotal();
System.out.println(total);
}
@Test
public void testFindByVo() throws Exception{
Vo vo=new Vo();
User user=new User();
user.setUserName("xxx");
user.setGender("男");
vo.setUser(user);
List<User> vos = userDao.findByVo(vo);
for (User user1:vos)
{
System.out.println(user1);
}
}
知识兔}