Spring Spring mvc mybatis 经验小结(1)

最近一直在研究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&amp;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();
}
}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值