使用步骤
1.导入jar包
除了mybatis的jar包外,还需要动态代理用到的jar包,数据库要用到的jar包
2.建立源代码文件夹,并在其下建立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">
- <!--配置项主要有三项:别名,应用环境,mapper文件位置-->
- <configuration>
- <!--对完全限定名较长的类,可在这里对其起别名(一般取类名),供mapper文件使用-->
- <typeAliases>
- <typeAlias type="com.kaishengit.entity.User" alias="User"/>
- <typeAlias type="com.kaishengit.entity.News" alias="News"/>
- </typeAliases>
- <!--对应用环境的配置,因为同一个项目可能需要在不同的环境下运行-->
- <environments default="dev">
- <!--对使用的事务管理器和数据源进行配置-->
- <environment id="dev">
- <transactionManager type="JDBC"></transactionManager>
- <dataSource type="POOLED">
- <property name="driver" value="com.mysql.jdbc.Driver"/>
- <property name="url" value="jdbc:mysql:///mydb"/>
- <property name="username" value="root"/>
- <property name="password" value="root"/>
- </dataSource>
- </environment>
- </environments>
- <!--明确所有mapper文件的位置-->
- <mappers>
- <mapper resource="com/kaishengit/mapper/usermapper.xml"/>
- <mapper resource="com/kaishengit/mapper/newsmapper.xml"/>
- </mappers>
- </configuration>
<?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">
<!--配置项主要有三项:别名,应用环境,mapper文件位置-->
<configuration>
<!--对完全限定名较长的类,可在这里对其起别名(一般取类名),供mapper文件使用-->
<typeAliases>
<typeAlias type="com.kaishengit.entity.User" alias="User"/>
<typeAlias type="com.kaishengit.entity.News" alias="News"/>
</typeAliases>
<!--对应用环境的配置,因为同一个项目可能需要在不同的环境下运行-->
<environments default="dev">
<!--对使用的事务管理器和数据源进行配置-->
<environment id="dev">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///mydb"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!--明确所有mapper文件的位置-->
<mappers>
<mapper resource="com/kaishengit/mapper/usermapper.xml"/>
<mapper resource="com/kaishengit/mapper/newsmapper.xml"/>
</mappers>
</configuration>
3.在src中建立mapper包(或dao包),编写mapper文件
- <!--mapper包相当于DAO包,通过对它的调用来实现对数据的增删改查-->
- <?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文件的命名空间只要保证唯一性可以随意起,但如果还要写它对应的接口时,则需要规范命名-->
- <mapper namespace="com.mapper.UserMapper">
- <!--对于select以外的三种操作,很简单:只需要采用相应的结点,写sql语句,配置id和字段类型-->
- 字段类型有两类:①int,String,long型---适用于sql语句中只需要一个变量的情况
- ②对象---适用于sql语句中需要多个变量的情况(sql语句引用时,只需要写其属性名)
- <insert id="save" parameterType="User">
- INSERT INTO t_user(username,PASSWORD) VALUES(#{username},#{password})
- </insert>
- <delete id="del" parameterType="long">
- delete from t_user where id = #{id}
- </delete>
- <update id="edit" parameterType="User">
- update t_user set username = #{username},password = #{password} where id = #{id}
- </update>
- 对于查询语句,分两类情况
- ①要查询的对象其属性中【不包含】其他对象或其他对象的集合----只使用select一个结点即可
- 要查询的是对象时:resultType为对象的别名
- 要查询的是对象集合时: resultType为对象的list ??
- <select id="findById" parameterType="long" resultType="User">
- SELECT id,username,password FROM t_user WHERE id = #{id}
- </select>
- ②要查询的对象其属性中【包含】其他对象或其他对象的集合---需要使用resultMap结点与select结点配合使用,要注意保证resultMap结点的id属性值与select的resultMap属性值相同
<!--mapper包相当于DAO包,通过对它的调用来实现对数据的增删改查-->
<?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文件的命名空间只要保证唯一性可以随意起,但如果还要写它对应的接口时,则需要规范命名-->
<mapper namespace="com.mapper.UserMapper">
<!--对于select以外的三种操作,很简单:只需要采用相应的结点,写sql语句,配置id和字段类型-->
字段类型有两类:①int,String,long型---适用于sql语句中只需要一个变量的情况
②对象---适用于sql语句中需要多个变量的情况(sql语句引用时,只需要写其属性名)
<insert id="save" parameterType="User">
INSERT INTO t_user(username,PASSWORD) VALUES(#{username},#{password})
</insert>
<delete id="del" parameterType="long">
delete from t_user where id = #{id}
</delete>
<update id="edit" parameterType="User">
update t_user set username = #{username},password = #{password} where id = #{id}
</update>
对于查询语句,分两类情况
①要查询的对象其属性中【不包含】其他对象或其他对象的集合----只使用select一个结点即可
要查询的是对象时:resultType为对象的别名
要查询的是对象集合时: resultType为对象的list ??
<select id="findById" parameterType="long" resultType="User">
SELECT id,username,password FROM t_user WHERE id = #{id}
</select>
②要查询的对象其属性中【包含】其他对象或其他对象的集合---需要使用resultMap结点与select结点配合使用,要注意保证resultMap结点的id属性值与select的resultMap属性值相同
- resultMap有id,type两个属性,结点下有四类子节点:id与result(都有column与property两个属性,前者表示sql语句查询出的结果集中的列名,后者表示对象的属性名,两者要相对应),collection(有property与ofType属性)与association(有property,column,javaType属性,column表示表格中引用其他表的列名)
resultMap有id,type两个属性,结点下有四类子节点:id与result(都有column与property两个属性,前者表示sql语句查询出的结果集中的列名,后者表示对象的属性名,两者要相对应),collection(有property与ofType属性)与association(有property,column,javaType属性,column表示表格中引用其他表的列名)
- 包含其他对象的集合时:
- <select id="findByIdwithNews" parameterType="long" resultMap="findUser">
- SELECT t_user.id,username,PASSWORD,t_news.id AS newsid,title,uid
- FROM
- t_user LEFT JOIN t_news
- ON
- t_user.id = t_news.uid
- WHERE t_user.id = #{id}
- </select>
- <resultMap type="User" id="findUser">
- <id column="id" property="id"/>
- <result column="username" property="username"/>
- <result column="password" property="password"/>
- <collection property="newsList" ofType="News">
- <id column="newsid" property="id"/>
- <result column="title" property="title"/>
- <result column="uid" property="uid"/>
- </collection>
- </resultMap>
- lt;/mapper>
包含其他对象的集合时:
<select id="findByIdwithNews" parameterType="long" resultMap="findUser">
SELECT t_user.id,username,PASSWORD,t_news.id AS newsid,title,uid
FROM
t_user LEFT JOIN t_news
ON
t_user.id = t_news.uid
WHERE t_user.id = #{id}
</select>
<resultMap type="User" id="findUser">
<id column="id" property="id"/>
<result column="username" property="username"/>
<result column="password" property="password"/>
<collection property="newsList" ofType="News">
<id column="newsid" property="id"/>
<result column="title" property="title"/>
<result column="uid" property="uid"/>
</collection>
</resultMap>
</mapper>
- <SPAN style="FONT-SIZE: 24px"><STRONG></STRONG></SPAN><PRE class=html name="code">包含其他对象:</PRE><PRE class=html name="code"><PRE class=html name="code"><?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="com.mapper.NewsMapper">
- <cache/> 表示使用缓存
- <select id="findById" resultMap="findByNews" parameterType="long">
- SELECT t_news.id,title,uid,t_user.id AS userid,username,PASSWORD
- FROM t_news
- LEFT JOIN t_user
- ON t_news.uid = t_user.id
- WHERE t_news.id = #{id}
- </select>
- <select id="findAll" resultType="list" resultMap="findByNews">
- SELECT t_news.id,title,uid,t_user.id AS userid,username,PASSWORD
- FROM t_news
- LEFT JOIN t_user
- ON t_news.uid = t_user.id
- </select>
- <resultMap type="News" id="findByNews">
- <id property="id" column="id"/>
- <result property="title" column="title"/>
- <result property="uid" column="uid"/>
- <association property="user" column="uid" javaType="User">
- <id property="id" column="userid"/>
- <result property="username" column="username"/>
- <result property="password" column="password"/>
- </association>
- </resultMap>
- </mapper></PRE><BR><BR></PRE>
- 包含其他对象:
包含其他对象:
- <PRE class=html name="code"><?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="com.mapper.NewsMapper">
- <cache/> 表示使用缓存
- <select id="findById" resultMap="findByNews" parameterType="long">
- SELECT t_news.id,title,uid,t_user.id AS userid,username,PASSWORD
- FROM t_news
- LEFT JOIN t_user
- ON t_news.uid = t_user.id
- WHERE t_news.id = #{id}
- </select>
- <select id="findAll" resultType="list" resultMap="findByNews">
- SELECT t_news.id,title,uid,t_user.id AS userid,username,PASSWORD
- FROM t_news
- LEFT JOIN t_user
- ON t_news.uid = t_user.id
- </select>
- <resultMap type="News" id="findByNews">
- <id property="id" column="id"/>
- <result property="title" column="title"/>
- <result property="uid" column="uid"/>
- <association property="user" column="uid" javaType="User">
- <id property="id" column="userid"/>
- <result property="username" column="username"/>
- <result property="password" column="password"/>
- </association>
- </resultMap>
- </mapper></PRE><BR><BR>
- <?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="com.mapper.NewsMapper">
- <cache/> 表示使用缓存
- <select id="findById" resultMap="findByNews" parameterType="long">
- SELECT t_news.id,title,uid,t_user.id AS userid,username,PASSWORD
- FROM t_news
- LEFT JOIN t_user
- ON t_news.uid = t_user.id
- WHERE t_news.id = #{id}
- </select>
- <select id="findAll" resultType="list" resultMap="findByNews">
- SELECT t_news.id,title,uid,t_user.id AS userid,username,PASSWORD
- FROM t_news
- LEFT JOIN t_user
- ON t_news.uid = t_user.id
- </select>
- <resultMap type="News" id="findByNews">
- <id property="id" column="id"/>
- <result property="title" column="title"/>
- <result property="uid" column="uid"/>
- <association property="user" column="uid" javaType="User">
- <id property="id" column="userid"/>
- <result property="username" column="username"/>
- <result property="password" column="password"/>
- </association>
- </resultMap>
- </mapper>
<?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="com.mapper.NewsMapper"> <cache/> 表示使用缓存 <select id="findById" resultMap="findByNews" parameterType="long"> SELECT t_news.id,title,uid,t_user.id AS userid,username,PASSWORD FROM t_news LEFT JOIN t_user ON t_news.uid = t_user.id WHERE t_news.id = #{id} </select> <select id="findAll" resultType="list" resultMap="findByNews"> SELECT t_news.id,title,uid,t_user.id AS userid,username,PASSWORD FROM t_news LEFT JOIN t_user ON t_news.uid = t_user.id </select> <resultMap type="News" id="findByNews"> <id property="id" column="id"/> <result property="title" column="title"/> <result property="uid" column="uid"/> <association property="user" column="uid" javaType="User"> <id property="id" column="userid"/> <result property="username" column="username"/> <result property="password" column="password"/> </association> </resultMap> </mapper>
4.测试类: ---(Resources.getResourceAsReader(“主配置文件名”))→reader
---(new SqlSessionFactoryBuilder().build(reader))→SqlSessionFactory
---(factory.openSession(true))→session
---(session.getMapper(xxxMapper.class))→mapper对象
---(调用session 或mapper的CRUD方法 )→查询结果
最后session要关闭
- public class Test {
public class Test {
- public static void main(String[] args) throws Exception {
public static void main(String[] args) throws Exception {
- Reader reder = Resources.getResourceAsReader("mybatis-config.xml");
- SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reder);
- SqlSession session = factory.openSession(true);
Reader reder = Resources.getResourceAsReader("mybatis-config.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reder);
SqlSession session = factory.openSession(true);
- true可要可省,若要,则表示每执行一次session的CRUD方法就提交一次;
true可要可省,若要,则表示每执行一次session的CRUD方法就提交一次;
- 若省去,则表示只有在调用session的commit方法后才将上面的操作一起提交。
- List<News> list = session.selectList("com.mapper.NewsMapper.findAll"); 相当于一个crud方法的位置,实际上是mapper配置文件的相应结点,根据id为findAll找到的,还有一个备用参数,用于传sql需要的参数
- for(News news : list) {
- System.out.println(news.getId() + "\t" + news.getTitle() + "\t" + news.getUser().getUsername());
- }
- /*News news = (News) session.selectOne("com.mapper.NewsMapper.findById", 1L);
- System.out.println(news.getTitle());
- System.out.println(news.getUser().getUsername());*/
- /*
- User user = (User) session.selectOne("com.mapper.UserMapper.findByIdwithNews", 1L);
- System.out.println(user.getUsername());
- for(News news : user.getNewsList()) {
- System.out.println(news.getTitle() + "\t" + news.getId());
- }
- */
- /*User user = new User();
- user.setId(25);
- user.setPassword("Mybatis");
- user.setUsername("Struts2");
- int rows = session.update("com.mapper.UserMapper.edit", user);
- System.out.println(rows);*/
- /*int rows = session.delete("com.mapper.UserMapper.del", 27);
- System.out.println(rows);*/
若省去,则表示只有在调用session的commit方法后才将上面的操作一起提交。
List<News> list = session.selectList("com.mapper.NewsMapper.findAll"); 相当于一个crud方法的位置,实际上是mapper配置文件的相应结点,根据id为findAll找到的,还有一个备用参数,用于传sql需要的参数
for(News news : list) {
System.out.println(news.getId() + "\t" + news.getTitle() + "\t" + news.getUser().getUsername());
}
/*News news = (News) session.selectOne("com.mapper.NewsMapper.findById", 1L);
System.out.println(news.getTitle());
System.out.println(news.getUser().getUsername());*/
/*
User user = (User) session.selectOne("com.mapper.UserMapper.findByIdwithNews", 1L);
System.out.println(user.getUsername());
for(News news : user.getNewsList()) {
System.out.println(news.getTitle() + "\t" + news.getId());
}
*/
/*User user = new User();
user.setId(25);
user.setPassword("Mybatis");
user.setUsername("Struts2");
int rows = session.update("com.mapper.UserMapper.edit", user);
System.out.println(rows);*/
/*int rows = session.delete("com.mapper.UserMapper.del", 27);
System.out.println(rows);*/
- <STRONG style="FONT-SIZE: 24px"> <SPAN style="COLOR: #cc0000">
- </SPAN></STRONG><SPAN style="COLOR: #cc0000; FONT-SIZE: 32px"> <STRONG><EM>另一种写法</EM></STRONG></SPAN><STRONG style="FONT-SIZE: 24px">
- 根据mapper文件的命名空间,建立相应的接口,要保证名称(接口名,参数类型,结果类型)一一对应
- public interface UserMapper {
- <SPAN style="WHITE-SPACE: pre"> </SPAN> public User findById(long id);
- <SPAN style="WHITE-SPACE: pre"> </SPAN>
- <SPAN style="WHITE-SPACE: pre"> </SPAN> public int save(User user);
- }
- /*
- User user = new User();
- user.setPassword("Mybatis");
- user.setUsername("springmvc");
- UserMapper mapper = session.getMapper(UserMapper.class);
- int rows = mapper.save(user);
- System.out.println(rows);*/
- //session.commit();
- /*UserMapper mapper = session.getMapper(UserMapper.class);
- User user = mapper.findById(8);
- System.out.println(user.getUsername());*/
- session.close();
- }
- }
- </STRONG>