最近一直在研究ssm 百度上各种不同的有不完整的例子 加上书上旧版本的讲解,弄得我有点迷糊,现在总算作出几个完整可用的例子了
1.mybatis
configuration.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config .//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
<typeAlias type="com.lijun.Beans.User" alias="User"/>
<typeAlias type="com.lijun.Beans.Article" alias="Article"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<!-- 配置连接数据库信息 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost/mybatis?useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="1234"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/lijun/beanMapping/UserMap.xml"/>
<!-- 需要用到的类的map.xml -->
</mappers>
</configuration>
pojo
package com.lijun.Beans;
public class User {
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String toString()
{
return "user[id="+id+" name="+name+" age="+age+"]";
}
}
package com.lijun.Beans;
import java.util.List;
public class Article {
private int aid;
private User user;
private String title;
private String content;
private List<Post> posts;
public int getAid() {
return aid;
}
public void setAid(int aid) {
this.aid = aid;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public List<Post> getPosts() {
return posts;
}
public void setPosts(List<Post> posts) {
this.posts = posts;
}
public String toString()
{
return "book[title:"+title+" user:"+user.getName()+" content:"+content+"]";
}
}
beanMapping
<?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.lijun.Interface.IUserOperation">
<!-- 用面向接口编程时 这儿的命名空间应该改成调用下面这些函数的接口的类路径 -->
<select id="selectById" parameterType="int" resultType="com.lijun.Beans.User">
select * from users where id=#{id}
</select>
<insert id="addUser" parameterType="User" useGeneratedKeys="true" keyProperty="id">
insert into users (name,age)values(#{name},#{age})
</insert>
<update id="updateUser" parameterType="User">
update users set name = #{name},age=#{age} where id = #{id}
</update>
<delete id="deleteUser" parameterType="int">
delete from users where id = #{id}
</delete>
<!-- resultmap相当于将查询到的结果集按照下面的result中设置的列名和属性名对应好然后注入到对象中 这个model可以复用 -->
<resultMap type="User" id="resultListUser">
<id column="id" property="id"/>
<result column="name" property="name"/>
<result column="age" property="age"/>
</resultMap>
<resultMap type="Article" id="resultUserArticleList">
<id column="id" property="aid"/>
<result column="title" property="title"/>
<result column="content" property="content"/>
<association property="user" javaType="User" resultMap="resultListUser"></association>
<collection property="posts" ofType="Post" resultMap="ArticlePostList"></collection>
</resultMap>
<resultMap type="Post" id="ArticlePostList">
<id property="id" column="id"/>
<result property="subject" column="subject"/>
<result property="body" column="body"/>
</resultMap>
<select id="getUserArticles" parameterType="int" resultMap="resultUserArticleList">
select users.id,users.name,users.age,articles.aid,articles.title,articles.content from users,articles where users.id=articles.userid and users.id=#{id}
</select>
<select id="postsForArticle" resultType="Post">
</select>
<select id="getArticle" parameterType="int" resultMap="resultUserArticleList">
select users.name,articles.title,articles.content,articles.posts from users,articles,posts where
</select>
</mapper>
调用相应方法的接口
package com.lijun.Interface;
import java.util.List;
import com.lijun.Beans.Article;
import com.lijun.Beans.User;
public interface IUserOperation {
public User selectById(int id);//对应UserMap中的各个标签的id(其实就是函数名) 这样当调用这个接口的函数时 就会执行UserMap中定义的相应的语句
public void addUser(User user);
public void updateUser(User user);
public void deleteUser(int id);
public List<Article> getUserArticles(int id);
}
测试类
package com.lijun.Actions;
import java.io.InputStream;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import com.lijun.Beans.Article;
import com.lijun.Beans.User;
import com.lijun.Interface.IUserOperation;
public class MybatisTest {
private static SqlSessionFactory sqlSessionFactory;
private static InputStream is;
static{
try{
is = MybatisTest.class.getClassLoader().getResourceAsStream("configuration.xml");//加载配置文件
sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
}catch(Exception e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
SqlSession session = sqlSessionFactory.openSession();
try{
IUserOperation useroperation = (IUserOperation) session.getMapper(com.lijun.Interface.IUserOperation.class);
//User user = (User)session.selectOne("com.lijun.beanMapping.UserMap.selectById",1);
/*User user = useroperation.selectById(1);
System.out.println(user);
User user1 = new User();
user1.setAge(21);
user1.setName("李君");
useroperation.addUser(user1);
user.setAge(12);
useroperation.updateUser(user);*/
List<Article> list = useroperation.getUserArticles(1);
for(Article article:list)
{
System.out.println(article.toString());
}
}catch(Exception e)
{
e.printStackTrace();
}finally
{
session.commit();
session.close();
}
}
}