MyBatis 的开发方式
1.使用原生接口
2.使用Mapper代理实现自定义接口
使用原生接口
1.使用原生接口MyBatis框架需要开发者自定义SQL语句,写在Mapper.xml文件中,实际开发中,会为每个实体类创建对应的Mapper.xml,定义管理该对象数据的SQL
<?xml version="1.0" encoding="UTF-8" 2>
<!DOCTYPE mapper PUBLIC "-//mybatis.orq//DTD Mapper 3.0//EN)"
http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespaces ="com. ztb.mapper. AccoutMapper">
<insert id="save" parameterType="com.ztb.entity. Account">
insert into t _account (username , password, age) values (#(username),# (password),#(age)
</insert>
</mapper>
namespace通常设置为文件所在包+文件名的形式。
insert标签表示执行添加操作。
select标签表示执行查询操作。
update标签表示执行更新操作。
delete标签表示执行删除操作。
id是实际调用MyBatis方法时需要用到的参数。
parameterType是调用对应方法时参数的数据类型。
2、在全局配置文件config.xml中注册AccountMapper.xml
<configuration>
<!--配置MyBatis运行环境->
<environments default="development">
<environment id-"development">
<!--配置JDBC事务管理-->
<transactionManager type="JDBC"></transactionManager>
<!-- POOLED配置JDBC数据源连接池-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.ci.idbc. Driver"></property>
<property name="driver" value="com.mysql.cj.jdbc.Driver"></property>
<property name-"url" value-"idbc:mysal://localhost:3306/mybatis?useUnicode=true& characterEncoding-UTF-8"> </property>
<property name="username" value="root"></property>
<property name="password" value="123456"></property>
</dataSource>
</environment>
</environments>
< !--注册AccountMapper.xml资源——>
< mappers >
< mapper = "com/ztb/mapper/AccountMapper.xml " >
< / mapper >
< / mappers >
<configuration>
- 调用MyBatis的原生接口执行操作
public class Test {
public static void main(String[] args)//加载MyBatis配置文件
Inputstream inputstream=Test.class.getclassLoader ().getResourceAsStream("config.xml");
SqlSessionFactoryBuilder sqlSessionFactoryBuilder =new SqlSessionFactoryBuilder();
SqlsessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputstream);
SqlSession sqlSession = sqlSessionFactory.openSession() ;
String statement = "com.southwind.mapper.AccoutMapper. save";
Account account = new Account (11,"张三"," 123123",22);
sqlSession. insert (statement, account);
sqlSession.commit();//提交事务
使用Mapper代理实现自定义接口
1.先在持久层(Dao)定义相关的增删改查接口
2、创建接口对应的Mapper.xml,定义接口方法对应的SQL语句。statement标签可根据SQL执行的业务选择insert, delete, update, select.MyBatis框架会根据规则自动创建接口实现类的代理对象。
规则:
Mapper.xml中namespace为接口的全类名。
Mapper.xml中statement的id为接口中对应的方法名。
Mapper.xml 中statement的parameterType和接口中对应方法的参数类型一致。
Mapper.xml 中statement的resultType和接口中对应方法的返回值类型一致.
<mapper namespace="com. southwind.repository.AccountRepository">
<insert id="save" parameterTvpe="com,ztb.Account">
insert into t_ account (username,password,age) values (#(usernane),#(possword),#( age))
</insert>
<update id="update" parameterType-"com.ztb.entity. Account">
update t_account set username =#(username) ,password =#(password) ,age =#(age) where id =#{id}
</update>
<select id="findAll" resultType="com. ztb.entity.Account">
select * from t account
</select>
<select id="findById" parameterType="long" resultType="com.ztb.entity.Account">
select * from t account where id =#(id)
</select>
</mapper>
3.在config.xml中注册AccountRespository.xml。
< !--注册AccountMapper.xml资源,注册AccountRespository.xml——>
< mappers >
< mapper = "com/ztb/mapper/AccountMapper.xml " >
< mapper = "com/ztb/repository/AccountRespository.xml " >
< / mapper >
< / mappers >
4.调用接口完成相关操作
public class Test {
public static void main(String[] args)//加载MyBatis配置文件
Inputstream inputstream=Test.class.getclassLoader ().getResourceAsStream("config.xml");
SqlSessionFactoryBuilder sqlSessionFactoryBuilder =new SqlSessionFactoryBuilder();
SqlsessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputstream);
SqlSession sqlSession = sqlSessionFactory.openSession() ;
///获取接口代理对象
AccountRepository accountRepository= sqlSession.getMapper(AccountRepository.class);
// String statement = "com.southwind.mapper.AccoutMapper. save";
// Account account = new Account (11,"张三"," 123123",22);
//sqlSession. insert (statement, account);
// sqlSession.commit();//提交事务
//修改对象
Account account = accountRepository.findById(3L);
account. setUsername ("小明");
account. setPassword ("000");account. setAge(18);
int result =accountRepository.update(account);
sqlSession. commit();//提交事务
System.out.println(result);
sqlSession. close();
//添加对象
Account account = new Account(3L,"王五", "111111",24);
int result = accountRepository. save(account);sqlSession.commit();
//查询全部对象
List<Account> list = aqgountRepository.findALL();
for (Account account:list){
System.out.println(account);
}
qlSession.close;