建立数据库
使用的是可视化的Mysql工具Navicat,实现数据库AskMe,四个表的建立,分别为
user comment message question
使用SQL INSERT语句实现表项的插入,数据库课上学过,在此不再赘述
MyBatis集成
MyBatis是数据库相关的一个框架,配置好该框架我们就只需要关心数据库执行语句的编写,而不用再手动去做数据库连接等操作
集成方法(具体参考官网文档)
1. application.properties增加spring配置数据库链接地址
spring.datasource.url=jdbc:mysql://localhost:端口名/数据库名
spring.datasource.username=用户名
spring.datasource.password=密码
mybatis.config-location=classpath:mybatis-config.xml
//上面那行是mybatis的配置文件的路径,之后会创建一个放在同一个文件夹下面
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
2. pom.xml引入mybatis-spring-boot-starter和mysql-connector-java
org.mybatis.spring.boot
mybatis-spring-boot-starter
1.1.1
mysql
mysql-connector-java
runtime
3. 配置mybatis-config-xml文件
4. 官网
PS:至于如何导入依赖,使用IDEA时他发现没有你写的dependency时会自动弹出Auto import,这是点击他就会帮你导入了
DAO层——数据库操作层的建立
mybatis 有通过Mapper注解的方式来实现数据库操作的方法,比用XML形式的更为直观,方法如下,首先定义一个Mapper的接口,在里面放入Insert/Select/Update等注解,括号内加上语句,之后在Test文件或者需要操作的地方,用Autowired导入,即可进行执行
- 定义Mapper
其中#{}包裹的表示是user中相应的属性,这样只要传递user进来,就可以执行insert语句了(同理可以写其他的如select update delete语句
@Mapper
public interface userdao {
String tablename="user";
String insertfield="name,password,salt,head_url";
String selectfield="id,"+insertfield;
@Insert({"INSERT INTO ",tablename,"("+insertfield+") Values(#{name},#{password},#{salt},#{head_url})"})
int insertuser(User user);
}
- Test文件执行
该过程向user数据库中写入了五个用户
@RunWith(SpringRunner.class)
@SpringBootTest
public class DatabaseTests {
@Autowired
private userdao userdata;
@Test
public void databaseinsert() {
Random random=new Random();
for(int i=10;i<15;i++)
{
User s=new User();
s.setName("User"+String.valueOf(i));
s.setPassword("1");
s.setSalt("2");
s.setHeadUrl(String.format("http://images.nowcoder.com/head/%dt.png",random.nextInt(1000)));
userdata.insertuser(s);
}
}
}
- 另一种方法,使用XML文件来执行数据库操作
- 要在resources文件夹下建立一个和Mapper文件路径完全一样的文件夹,然后建一个名字完全一样的XML文件
- 在XML文件中写入
- 这些全都是要写在XML文件中的,第二段是resultMap映射关系的建立,type中填写的是你model中设计的类的完整路径名,id是自己取的名字,之后的select语句中写resultMap=你取的名字,就表示用这种类型的数据返回
- 下面 column表示数据库结果的属性,property表示你model中Class的属性名。
- 第三段中selec的id一定要和Mapper中的函数名一致
question
id, title, content, comment_count,created_date,user_id
//第二段
//第三段
- 在Mapper函数中这样去传递参数
- 函数名要和XML中的select id一致,用@Param("XML文件中参数名字") 和函数参数建立映射,XML中的参数名字就是用#{}包裹的部分,这样,调用是例如selectLatestQuestions(0,0,10)就是向select脚本传递了user_id=0等数据
public interface questiondao {
String tablename="question";
List selectLatestQuestions(@Param("userId") int userId,@Param("offset") int offset,@Param("limit") int limit);
}
- 注意,XML中最好用resultMap来建立数据库列和函数属性之间的关系关系,如果简单地用resultMap会出现基本类型得到0或NULL的情况
个人主页的建立
编程规范 service调用DAO层,controller调用Service
- 编写Service来实现DAO和Controller之间的连接
@Service
public class QuestionService {
@Autowired
private questiondao questiondate;
public List getquestionbydate(int userid,int offset,int limit)
{
return questiondate.selectLatestQuestions(userid,offset,limit);;
}
}
2.向HTML文件中传递从Service(Service从DAO,DAO从数据库)拿来的数据,具体方法在上一篇文章中的Model传值,freemarker语言调用参数,方法等