今天是第一天学习mybatis,mybatis是针对dao(持久层的)一种框架
首先进行核心文件配置,文件名:SqlMapConfig.xml
添加config约束及配置数据库代码,引入语句执行文件(statement),这里语句文件名为user1.xml
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.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://localhost:3307/mybits?characterEncoding=utf-8" />
<property name="username" value="root" />
<property name="password" value="513721abcd" />
</dataSource>
</environment>
</environments>
<mappers><!-- 引入语句执行文件 -->
<mapper resource="user1.xml" />
</mappers>
</configuration>
user1.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">
<!--写SQL语句 -->
<mapper namespace="demo1.User1Mapper"><!--namespace用来区分不同此类配置文件下的语句id -->
<!--parameterType是传入参数的类型。resultType是返回类型,注意:假设数据库返回的是一个对象集合,
这里resultType是指的这个对象,而不是对象集合 -->
<select id="findbyid" parameterType="Integer" resultType="demo1.User1">
select *from user where id=#{v} <!-- v可以换成任意值 -->
</select>
<!-- #{}: 占位符是字符串时是自带单引号的 select *from user where username=? ?=='?' ?可以直接取值字符串,如张三
${}:select * from username like '%${}%' 字符串拼接,不自带单引号 ,如 '%张%',在语句中要写单引号 -->
<select id="findbyusername" parameterType="String" resultType="demo1.User1">
select *from user where username like '%${value}%' <!-- 大括号内只能填value -->
<!--或者 : select *from user where username like "%"#{v}"%" (防注入写法) -->
</select>
<insert id="insert" parameterType="demo1.User1">
<selectKey keyProperty="id" resultType="Integer" order="AFTER">
select last_insert_id()
</selectKey>
insert into user (username,birthday,address,sex)
values (#{username},#{birthday},#{address},#{sex})
</insert>
<update id="update" parameterType="demo1.User1">
update user set
username=#{username},birthday=#{birthday},address=#{address},sex=#{sex}
where id=#{id}
</update>
<delete id="delete" parameterType="String">
delete from user where username=#{f}
</delete>
</mapper>
进行测试
private static void selectbyid() throws IOException {
//加载核心配置文件
String resource="SqlMapConfig.xml";
InputStream in = Resources.getResourceAsStream(resource);
//创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
//创建SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
//执行sql语句
User1 user = sqlSession.selectOne("demo1.User1Mapper.findbyid", 1);//user.xml文件中namespace加上sql语句的id
//第二个参数一定要与user.xml文件中相对应语句的parameterTyp的类型一致
System.out.println(user);
}
执行结果
User [id=1, username=王五, sex=2, birthday=null, address=null]
数据库数据:
根据username查询
private static void selectbyusername() throws IOException {
String resource="SqlMapConfig.xml";
InputStream in = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
SqlSession sqlSession = sqlSessionFactory.openSession();
List<User1> user = sqlSession.selectList("demo1.User1Mapper.findbyusername", "五");
System.out.println(user);
}
插入数据
User1 user=new User1();
user.setUsername("李四");
user.setBirthday(new Date());
user.setSex("男");
user.setAddress("福建");
String resource="SqlMapConfig.xml";
InputStream in = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
SqlSession sqlSession = sqlSessionFactory.openSession();
System.out.println(sqlSession.insert("demo1.User1Mapper.insert",user));
sqlSession.commit();
System.out.println(user.getId());
注意:
System.out.println(sqlSession.insert(“demo1.User1Mapper.insert”,user));
方法参数1是user.xml文件中namespace加上sql语句的id,参数2的类型要与user.xml文件中相对应语句的parameterTyp的类型一致
在进行增删改时在结尾记得提交事务: sqlSession.commit();