Mybatis
第一个Mybatis程序
mybatis下载
https://github.com/mybatis/mybatis-3/releases
导入jar包
创建一个source folder类型的文件目录—config
log4j.properties
mybatis默认使用log4j作为输出日志信息
# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
SqlMapConfig.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>
<!-- 和spring整合后 environments配置将废除-->
<environments default="development">
<environment id="development">
<!-- 使用jdbc事务管理-->
<transactionManager type="JDBC" />
<!-- 数据库连接池-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/ssmproject?serverTimezone=UTC" />
<property name="username" value="root" />
<property name="password" value="wjk" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="User.xml"/>
<mapper resource="User2.xml"/>
</mappers>
</configuration>
创建一个User类
public class User {
private String id=null;
private String username=null;
private String phone=null;
private String password=null;
@Override
public String toString() {
return "id=" + id + ", username=" + username + ", phone=" + phone + ", password=" + password;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public User(String username, String phone, String password) {
this.username = username;
this.phone = phone;
this.password = password;
}
public User() {
}
}
sql映射文件User.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="test">
</mapper>
mybatis框架需要加载映射文件,将User.xml添加在SqlMapConfig.xml
<mappers>
<mapper resource="User.xml"/>
</mappers>
我的User.xml和 SqlMapConfig.xml都在config中
在User.xml配置基本的操作
<!-- 查询 -->
<select id="findUserByName" parameterType="String" resultType="com.xiaohu.baidu.domain.User">
select * from user where username="${value}"
</select>
<!-- 添加 -->
<insert id="addUser" parameterType="com.xiaohu.baidu.domain.User">
<!-- 获得id的值 -->
<selectKey resultType="String" order="BEFORE" keyProperty="id">
select uuid()
</selectKey>
insert into User values(#{id},#{username},#{phone},#{password});
</insert>
<!-- 删除 -->
<delete id="deleteUser">
delete from User where id=#{id}
</delete>
<!-- 修改 -->
<update id="updateUser" parameterType="com.xiaohu.baidu.domain.User">
update user set username=#{username} where id=#{id}
</update>
测试程序
public class test {
SqlSessionFactory ssf=null;
@Before
public void createFactory() {
InputStream is=null;
try {
is= Resources.getResourceAsStream("SqlMapConfig.xml");
}catch(Exception e) {
e.printStackTrace();
}
ssf = new SqlSessionFactoryBuilder().build(is);
}
/*查询*/
@Test
public void findByName() {
SqlSession sqls=ssf.openSession();
User user = sqls.selectOne("test.findUserByName","抠脚萝莉");
System.out.println("查询到用户 "+user);
sqls.close();
}
/*添加*/
@Test
public void addUser() {
User user = new User("甜心大叔","18228053954","wjk");
SqlSession sqls=ssf.openSession();
int yn=sqls.insert("test.addUser",user);
sqls.commit();
if(yn>0) {
System.out.println("用户 "+user.getId()+" 插入成功 ");
sqls.close();
}
}
/*删除*/
@Test
public void deleteUser() {
SqlSession sqls=ssf.openSession();
sqls.delete("test.deleteUser","1");
sqls.commit();
System.out.println("用户删除成功");
sqls.close();
}
/*修改*/
@Test
public void updateUser() {
SqlSession sqls=ssf.openSession();
User user = new User();
user.setUsername("抠脚小萝莉");
user.setId("1");
sqls.update("test.updateUser",user);
sqls.commit();
System.out.println("用户修改成功");
sqls.close();
}
}
数据库自行创建
Mapper动态代理方式
Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同上边Dao接口实现类方法
Mapper接口开发需要遵循以下规范:
1.Mapper.xml文件中的namespace与mapper接口的类路径相同。
2.Mapper接口方法名和Mapper.xml中定义的每个statement的id相同
3.Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql 的 parameterType的类型相同
4.Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同
Mapper.xml(映射文件)
<mapper namespace="com.xiaohu.baidu.mapper.UserMapper">
<!-- 查询 -->
<select id="findUser" parameterType="int" resultType="com.xiaohu.baidu.domain.User.java">
select * from user where id=#{id}
</select>
</mapper>
Mapper.java(接口文件)
public interface UserMapper {
User findUser(int id);
}
测试程序
public class testdemo {
private SqlSessionFactory ssff=null;
@Before
public void Factory() {
InputStream is = null;
try {
is = Resources.getResourceAsStream("SqlMapConfig.xml");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ssff = new SqlSessionFactoryBuilder().build(is);
}
@Test
public void findUserById() {
SqlSession sqlSession = ssff.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = userMapper.findUser(1);
System.out.println(user);
sqlSession.close();
}
}
第一周