文章目录
8. 使用注解开发
早期的,mybatis都是使用xml进行配置的,直到注解的出现,注解可以替代一些xml中的配置。
连xml配置都不要了!
CRUD的注解:
- @insert()
- @delete()
- @update()
- @select()
有一个构造器,可以实现事务自动提交。
openSession(true); //openSession构造器如果参数为true,则事务会自动提交。我们就不用每次都commit;
优化项目
1. 事务优化:自动提交事务
//获得一个带事务自动提交功能的SqlSession公共的方法
public static SqlSession getSqlSession(){
//自动提交事务
//开启事务自动提交,openSession构造器为true,则事务会自动提交
return sqlSessionFactory.openSession(true);
}
2. 别名优化:pojo包下类自动设置别名
<!--配置别名-->
<typeAliases>
<!--<typeAlias type="com.westos.pojo.User" alias="User"/>-->
<package name="com.westos.pojo"/>
</typeAliases>
mapper映射文件路径修改
<mappers>
<!--class对应的是一个接口类-->
<!--resource对应的是一个接口类的映射文件-->
<mapper class="com.westos.dao.UserDao"/>
<!--<mapper resource="com/westos/dao/UserMapper.xml"/>-->
</mappers>
使用注解进行开发
与原来的相比,使用注解代替了与接口相对应的UserMapper.xml配置文件
1. 接口:UserDao
package com.westos.dao;
import com.westos.pojo.User;
import org.apache.ibatis.annotations.*;
import java.util.List;
public interface UserDao {
//查询全部用户
@Select("select * from user")
List<User> getUserAllList();
//通过id查询用户
@Select("select * from user where id = #{id}")
User getUserById(int i);
//添加用户
@Insert("insert into user(id, name, pwd) values(#{id},#{name},#{pwd})")
int addUser(User user);
//修改用户
@Update("update user set name = #{name},pwd = #{pwd} where id = #{id}")
int updateUser(User user);
//删除用户
@Delete("delete from user where id = #{id}")
int deleteUser(@Param("id") int id);
//@Param 多个的话就需要@Param进行标识
}
2. mybatis核心配置文件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>
<!--配置文件-->
<properties resource="db.properties"/>
<!--myabris配置-->
<!--<settings>-->
<!--<!–默认日志实现–>-->
<!--<setting name="logImpl" value="STDOUT_LOGGING"/>-->
<!--<!–Log4j实现-->
<!--注意大小写-->
<!--–>-->
<!--</settings>-->
<!---->
<typeAliases>
<!--配置指定类的别名-->
<!--<typeAlias type="com.westos.pojo.User" alias="User"/>-->
<!--
可以为一个包的所有类指定别名,这个别名为类名
com.kuang.pojo.User - > User
com.kuang.pojo.Student - > Student
-->
<package name="com.westos.pojo"/>
</typeAliases>
<!--配置环境,这里可以有多套环境 default代表默认的那一套-->
<environments default="development">
<!--配置一套环境 id,环境的名字-->
<environment id="development">
<!--transactionManager :事务管理,type:jdbc-->
<transactionManager type="JDBC"/>
<!--dataSource 数据源-->
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<!--xml中不允许&符号直接出现,我们需要使用& 代替-->
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<!--关联映射文件-->
<mappers>
<!--class对应的是一个接口类-->
<!--resource对应的是一个接口类的映射文件-->
<mapper class="com.westos.dao.UserDao"/>
<!--<mapper resource="com/westos/dao/UserMapper.xml"/>-->
</mappers>
</configuration>
db.properties文件
driver = com.mysql.jdbc.Driver
url = jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=utf-8
username = root
password =123456
3. 测试类test
package com.westos.dao;
import com.westos.pojo.User;
import com.westos.utils.MyBatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.List;
public class test {
@Test
//获取全部用户
public void getUserAllList(){
SqlSession sqlSession = MyBatisUtils.getSqlSession();//带自动提交事务
//getSqlSession()方法是自己设置的一个方法,在工具包中,方法MyBatisUtils
UserDao mapper = sqlSession.getMapper(UserDao.class);
List<User> userAllList = mapper.getUserAllList();
for (User user : userAllList) {
System.out.println(user);
}
sqlSession.close();//关闭sqlSession
}
@Test
//通过id来查询用户
public void getUserById(){
SqlSession sqlSession = MyBatisUtils.getSqlSession();//带自动提交事务
UserDao mapper = sqlSession.getMapper(UserDao.class);
User user = mapper.getUserById(2);
System.out.println(user);
sqlSession.close();//关闭sqlSession
}
@Test
//添加用户
public void addUser(){
SqlSession sqlSession = MyBatisUtils.getSqlSession();
UserDao mapper = sqlSession.getMapper(UserDao.class);
User user = new User(6, "小江", "123444");
int i = mapper.addUser(user);
if(i>0){
System.out.println("添加成功");
}
sqlSession.close();//关闭sqlSession
}
@Test
//修改用户
public void updateUser(){
SqlSession sqlSession = MyBatisUtils.getSqlSession();
UserDao mapper = sqlSession.getMapper(UserDao.class);
User user = new User(3,"李四","123456");
int i = mapper.updateUser(user);
System.out.println(i>0?"修改成功":"修改失败");
sqlSession.close();//关闭sqlSession
}
@Test
//根据id删除用户
public void deleteUser(){
SqlSession sqlSession = MyBatisUtils.getSqlSession();
UserDao mapper = sqlSession.getMapper(UserDao.class);
int i = mapper.deleteUser(6);
if(i>0){
System.out.println("删除成功");
}
sqlSession.close();//关闭SqlSession
}
}
4. 测试结果:
-
获取全部用户getUserAllList测试结果
-
通过id来查询用户getUserByIdt测试结果
3.添加用户 addUsert测试结果
4.更新用户 updateUsert测试结果
- 根据id删除用户deleteUsert测试结果
注意事项
- 开启事务自动提交了
- @param参数尽量都写上,如果有多个参数,就必须填写。